2009-03-08 4 views

ответ

3

SQLite использует Манифест (Динамический) ввод. Типы столбцов являются только ориентиром и поэтому изменение типа данных столбца не требуется. Column Affinity используется только для обеспечения совместимости со статически типизированными базами данных.

Из SQLite documentation:

SQLite использует динамическую типизацию. Он не применяет ограничения типа данных. Любые данные могут быть вставлены в любой столбец. Вы можете поместить произвольные строки длины в целые столбцы, числа с плавающей точкой в булевых столбцах или даты в столбцах символов. Тип данных вы присвоить столбец в CREATE TABLE команда не ограничивает то, что данные может быть помещена в эту колонку ...

SQLite действительно используют объявленный тип столбца как намек, что вы предпочитаете значения в этом формате. Итак, для примера , если столбец имеет тип INTEGER, и вы пытаетесь вставить строку в этот столбец, SQLite попытается выполнить , чтобы преобразовать строку в целое число. Если он может, он вместо этого вставляет целое число . Если нет, он вставляет строку

Они продолжают утверждать, что это не ошибка, а функция. Если это проблема для вашего приложения, я думаю, что SQlite может быть не лучшим выбором для вас.

2

Пепел правильный, но я хотел бы добавить, что если сродство типа столбца вызывает проблемы для вас (например, если строки, которые выглядят как числа, преобразуются и сохраняются неточно), единственным вариантом является копирование все данные во временную таблицу, отбросить оригинал, воссоздать его с правильным определением и скопировать данные обратно. Насколько мне известно, это не считается признаком. ; ^)

Смежные вопросы