Огромные (20 цифр) первичные ключи и SQLite

Если я пытаюсь вставить данные с 20-значным первичным ключом в базу данных SQLite, я получаю сообщение об ошибке со вторым оператором вставки, потому что он «не уникален». Если я выберу значения, я вижу в подсказке команды SQLite, что первичный ключ записан в научной нотации. Тип столбца - десятичный. Есть ли способ заставить SQLite вставлять значения «как они», сохраняя точность / «нормальное представление» даже с такими длинными значениями?


person tobsen    schedule 14.10.2008    source источник


Ответы (3)


вставьте его как «строку», а не как число.

person Community    schedule 14.10.2008
comment
Что ж, мне пришлось определить столбец как ТЕКСТ и вставить указанные значения. Я думаю, это из-за сродства типов SQLite - person tobsen; 15.10.2008
comment
Стив, это так холодно. Я должен помнить об этом. - person Anders Eurenius; 15.10.2008

поле первичного ключа должно быть целым числом, наибольшее значение - 9223372036854775807. используйте отдельное (индексированное) поле и вставьте значение как строку.

person Javier    schedule 14.10.2008
comment
Нет требования, чтобы первичный ключ был целым числом в SQLite. Rowid - это 64-битное целое число, но это совсем другое дело. Первичный ключ может быть любым типом данных. Подробнее см. Здесь: sqlite.org/autoinc.html - person Mihai Limbășan; 15.10.2008

Странно, звучит так, будто ваша обертка помещает число как плавающее. Я думал, что DECIMAL внутренне сопоставлен с целым числом. Использование строки будет работать, но может быть медленным при индексации строки, а не int.

person Community    schedule 23.12.2008
comment
DECIMAL имеет числовое сродство. Это означает, что может быть сохранен любой тип данных, но строки преобразуются в INTEGER или REAL, если это возможно. OP, вероятно, объявил столбец INTEGER PRIMARY KEY, который действительно требует 64-битного целого числа со знаком. - person dan04; 31.07.2010