Главная / C# статьи > Использование SQLite в C#: Часть 2 – Типы данных

Использование SQLite в C#: Часть 2 – Типы данных

В отличие от подавляющего большинства других движков баз данных, SQLite не имеет строгой типизации хранимых данных. Это сделано в целях обеспечения максимальной совместимости синтаксиса SQL-запросов с другими SQL-движками. Однако определенный набор правил все же есть.
SQLite имеет пять классов хранимых данных:

В SQLite нет булева типа данных, поэтому значение TRUE и FALSE предполагается храниться в виде 1 и 0 класса INTEGER.

Также SQLite не содержит отдельного класса для хранения даты и времени. На усмотрение разработчика предлагается три варианта хранения:
INTEGER – в виде целого числа секунд, прошедших от точки отчета 1970-01-01 00:00:00 UTC. Это наиболее популярный и быстрый вариант, знакомый поклонникам Unix.

За исключением колонки, выделенной для ключей записей, любые другие колонки таблиц могут хранить данные любого типа. Однако разработчик может задать для колонок предопределенные типы сопоставлений, которые будут определять тип и преобразование к нему вводимых данных.

За исключением колонки, выделенной для ключей записей, любые другие колонки таблиц могут хранить данные любого типа. Однако разработчик может задать для колонок предопределенные типы сопоставлений, которые будут определять тип и преобразование к нему вводимых данных.
В колонке типа TEXT могут храниться данные классов NULL, TEXT и BLOB, при записи числового значения оно преобразуется в текст.
В колонке типа NUMERIC могут храниться данные все классов. При записи текстового значения делается попытка преобразовать его в целое или вещественное число, если таковое действие возможно.
Колонка типа INTEGER аналогична NUMERIC, за единственным исключением – они по разному обрабатываются функцией CAST.
Колонка типа REAL также аналогична NUMERIC, за исключением того, что целые числа при записи обязательно преобразуются в вещественные.
Колонка типа сопоставления NONE не выполняет каких-либо преобразований вводимых данных.
При создании таблиц их колонки получают свои типы сопоставления в следующем порядке:


По умолчанию, каждая запись таблицы SQLite содержит ключ – 64-битное целое уникальное число, позволяющее однозначно идентифицировать запись. В тексте SQL-запроса это значение можно считать с помощью предопределенных названий "rowid", "oid", "_rowid_". Данные значения ключей не генерируются движком, если при создании таблицы был указан параметр WITHOUT ROWID.
Если при создании таблицы одна из колонок имеет тип INTEGER и параметр PRIMARY KEY в том или ином виде, то эта колонка автоматически становится псевдонимом для значений ключей записей таблицы. Примеры:
CREATE TABLE t(id INTEGER PRIMARY KEY, title);
CREATE TABLE t(id INTEGER, title, PRIMARY KEY(id));
В этом случае значения колонок, полученных в результате выполнения запроса SELECT id, rowid FROM t, будут идентичными.
По умолчанию, если значения ROWID достигли максимального значения INTEGER, то новые значения будут подбираться среди ранее использованных значений ключей удаленных записей. Если разработчику необходимо, чтобы ключевые значения всегда оставались уникальными, то при создании таблицы в описании ключевой колонки следует указать параметр AUTOINCREMENT:
CREATE TABLE t(id INTEGER PRIMARY KEY AUTOINCREMENT, title);
Значения ключей могут задаваться вручную непосредственно в командах INSERT и UPDATE:
INSERT INTO t(rowid, title) VALUES(10, 'One');

Продолжение в следующей статье...
15-02-2015, 17:27. Разместил: administrator
Вернуться назад