Wenn ich versuche, Daten mit einem 20-stelligen Primärschlüssel in eine SQLite-Datenbank einzufügen, erhalte ich einen Fehler mit der zweiten insert-Anweisung, weil es "ist nicht eindeutig". Wenn ich die Werte aus dem SQLite-Befehlsprompt wähle, wird der Primärschlüssel in wissenschaftlicher Notation geschrieben. Der Spaltentyp ist dezimal. Gibt es eine Möglichkeit, SQLite dazu zu zwingen, die Werte "so wie sie sind" einzufügen und die Präzision/"normale Darstellung" auch bei langen Werten beizubehalten?Riesige (20 Ziffern) Primärschlüssel und SQLite
Antwort
fügen Sie es als eine 'Zeichenfolge', keine Nummer ein.
Das Primärschlüsselfeld muss eine ganze Zahl sein, der größte Wert ist 9223372036854775807. Verwenden Sie ein separates (indiziertes) Feld, und fügen Sie den Wert als Zeichenfolge ein.
Es gibt keine Anforderung, dass der Primärschlüssel eine Ganzzahl in SQLite ist. Die Rowid ist eine 64-Bit-Ganzzahl, aber das ist eine ganz andere Sache. Der Primärschlüssel kann ein beliebiger Datentyp sein. Siehe hier für Details: http://www.sqlite.org/autoinc.html –
Seltsam, hört sich an, als würde Ihr Wrapper die Zahl als Float setzen. Ich dachte DECIMAL wurde intern auf eine ganze Zahl abgebildet. Die Verwendung eines Strings würde funktionieren, könnte aber langsam zur Indexierung des Strings und nicht zu einem int führen.
DECIMAL hat numerische Affinität. Dies bedeutet, dass jeder Datentyp gespeichert werden kann, aber Zeichenketten möglichst in INTEGER oder REAL konvertiert werden. Das OP deklarierte wahrscheinlich eine Spalte "INTEGER PRIMARY KEY", die * eine 64-Bit-Ganzzahl mit Vorzeichen erfordert. – dan04
Nun, ich musste die Spalte als TEXT definieren und die angegebenen Werte einfügen. Ich denke, das liegt an der Typ-Affinität von SQLite – tobsen
Steve, das ist * so * kalt. Ich muss mich daran erinnern. –