среда, 3 февраля 2010 г.

Типы данных в SQLite

При отладке kvlite) столкнулся с интересным вопросом. Наверное для кого-то это не будет большой новостью, но для меня это было открытием. И так, типы данных в SQLite декларативные. Т.е. независимо от того, какой тип данных для поля был указан при создании таблицы, в этом поле могут быть сохранены значения разных типов. При этом SQLite сам определяет тип данных для сохранения значения поля. Задание типа данных для поля таблицы указывает SQLite на предпочтительный тип данных для сохранения значений. Если передаваемое значение возможно преобразовать к указанному типу, SQLite сохранит данные как тип указанный в схеме. Если преобразование невозможно, то данные будут сохранены с тем типом, который был передан.

Продемонстрируем это на примере:

Для эксперимента создадим таблицу, состоящую из двух полей. Одно поле (k) - это ключ, тип поля - текст. Второе поле (v) - значение, для хранения данных целого типа.
sqlite> CREATE TABLE kv (k TEXT PRIMARY KEY, v INTEGER NOT NULL);
Занесем несколько значений:
sqlite> INSERT INTO "kv" VALUES('key1',1);
sqlite> INSERT INTO "kv" VALUES('key2',2);
sqlite> select * from kv;
key1|1
key2|2
Как видно из примера, ничего не обычного не произошло. Данные занесены как значения целого типа. Теперь посмотрим, что произойдет, если мы попытаемся занести в таблицу kv значения v отличные от типа INTEGER, например текст.
sqlite> INSERT INTO "kv" VALUES('key3','text1');
sqlite> INSERT INTO "kv" VALUES('key4','text2');
sqlite> select * from kv;
key1|1
key2|2
key3|text1
key4|text2
на примере видно, что SQLite не видал никаких ошибок, и успешно внес текстовые данные в таблицу.

Более детальной информацию о специфике типов данных можно получить на сайте SQLite

Что это нам дает? С одной стороны это накладывает необходимость проверки данных перед тем, как заносить их в SQLite, если наше приложение зависит от типа данных. С другой стороны это возможность хранить различные типы данных в одной таблице. Примером может служить хранение конфигурационных данных, где типы данных могут отличаться.

0 комментариев:

Отправить комментарий