2008-10-14 18 views
5

Si trato de insertar datos con una clave primaria de 20 dígitos en una base de datos SQLite obtengo un error con la segunda declaración de inserción porque "no es único". Si selecciono los valores, puedo ver desde el comando de SQLite que la clave primaria está escrita en notación científica. El tipo de columna es decimal. ¿Hay alguna manera de obligar a SQLite a insertar los valores "tal como están" manteniendo la precisión/"representación normal" incluso con valores tan largos?Enormes (20 dígitos) Claves principales y SQLite

Respuesta

4

insértala como una 'cadena', no como un número.

+0

Bueno, tuve que definir la columna como TEXTO e insertar los valores citados. Creo que esto se debe a la afinidad de tipo de SQLite – tobsen

+0

Steve, que es * tan * frío. Tengo que recordar eso. –

3

el campo de la clave primaria debe ser un número entero, el valor más grande es 9223372036854775807. utilice un campo separado (indexado) e inserte el valor como una cadena.

+6

No hay ningún requisito en cuanto a que la clave primaria sea un entero en SQLite. El rowid es un entero de 64 bits, pero esa es una cuestión totalmente diferente. La clave principal puede ser cualquier tipo de datos que desee. Consulte aquí para obtener más información: http://www.sqlite.org/autoinc.html –

0

Extraño, parece que su envoltorio está colocando el número como un flotador. Pensé que DECIMAL estaba mapeado a un número entero internamente. Usar una cadena funcionaría, pero puede ser lento para la indexación de la cadena en lugar de una int.

+0

DECIMAL tiene afinidad numérica. Esto significa que cualquier tipo de datos puede almacenarse, pero las cadenas se convierten a INTEGER o REAL si es posible. El OP probablemente haya declarado una columna "INTEGER PRIMARY KEY", que * does * requiere un entero con signo de 64 bits. – dan04

Cuestiones relacionadas