В SQLite предусмотрено только 5 типов данных:
- NULL. Пустое значение в таблице базы.
- INTEGER. Целочисленное значение.
- REAL. Числовое значение с плавающей точкой.
- TEXT. Значение строки текста. Хранится с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
- BLOB. Значение бинарных данных, хранящихся точно в том же виде, в каком были введены.
Однако некоторые менеджеры, позволяющие управлять базами данных SQLite, предоставляют нам возможность «большего» выбора. Так, SQLite Studio предоставляют выбор из следующих типов данных:
- bigint
- blob
- boolean
- char
- date
- datetime
- decimal
- double
- integer
- int
- none
- numeric
- real
- string
- text
- time
- varchar
Выходит, 17 против стандартных 5. Однако все эти 17 типов в конечном итоге приводятся все к тем же null, integer, real, text или blob. И каким образом после преобразования будут выглядеть данные решает SQLite, а не вы.
Например, в SQLite нет типа данных для хранения даты и времени. Однако есть встроенные функции SQLite для работы с этими типами данных. Для наглядности при создании столбца в разделе тип данных вы указываете datetime, но на самом деле данные будут храниться как тип данных text.
Итак, перейдем к теме. Задача: хранение кодов, состоящий из количества цифр >20, в поле базы строкового типа. Допустим, выбран тип string в SQLite Studio для решения данного вопроса:
[pastacode lang=»sql» manual=»CREATE%20TABLE%20Codes%20(%0Acode%20STRING%20(50)%20UNIQUE%20NOT%20NULL)%3B» message=»» highlight=»» provider=»manual»/]
Для строк 2222223333333333666666666999999999 и 1111111114444444444222222222333333333 в таблице вы увидете
Так, конечно же, не пойдет: код нужен целиком. Чтобы такие строки отображались корректно, необходимо использовать тип данных text, char, varchar (которые в конечном итоге приводятся к типу данных text):
Дело в том, что тип string будет приводится к типам real или integer, если данные похожи на вещественное или целое число, соответственно. Так, строка вида ‘0147’ преобразуется в ‘147’.