Взято непосредственно из документации SQLite о типах данных для SQLite версии 3:
Большинство механизмов баз данных SQL (насколько нам известно, все механизмы баз данных SQL, кроме SQLite) используют статическую жесткую типизацию. При статической типизации тип данных значения определяется его контейнером - конкретным столбцом, в котором хранится значение.
SQLite использует более общую систему динамических типов. В SQLite тип данных значения связан с самим значением, а не с его контейнером. Система динамических типов SQLite обратно совместима с более распространенными системами статических типов других механизмов баз данных в том смысле, что операторы SQL, которые работают со статически типизированными базами данных, должны работать в SQLite таким же образом. Однако динамическая типизация в SQLite позволяет делать вещи, которые невозможны в традиционных жестко типизированных базах данных.
Сходство столбца: используйте PRAGMA table_info(table-name);
. PRAGMA table_info()
дает таблицу со столбцами cid
, name
, type
, notnull
, dflt_value
и pk
.
Столбцы в наборе результатов включают имя столбца, тип данных, может ли столбец иметь значение NULL и значение по умолчанию для столбца. Столбец pk в наборе результатов равен нулю для столбцов, которые не являются частью первичного ключа, и является индексом столбца в первичном ключе для столбцов, которые являются частью первичного ключа.
Тип данных значения: используйте typeof(column)
, чтобы узнать, как значения на самом деле хранятся в SQLite.
Пример адаптирован из раздела 3.4:
CREATE TABLE t1(
t TEXT, -- text affinity by rule 2
nu NUMERIC, -- numeric affinity by rule 5
i INTEGER, -- integer affinity by rule 1
r REAL, -- real affinity by rule 4
no BLOB -- no affinity by rule 3
);
-- Values stored as TEXT, INTEGER, INTEGER, REAL, TEXT.
INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0', '500.0');
-- Values stored as TEXT, INTEGER, INTEGER, REAL, REAL.
INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0, 500.0);
-- Values stored as TEXT, INTEGER, INTEGER, REAL, INTEGER.
INSERT INTO t1 VALUES(500, 500, 500, 500, 500);
-- BLOBs are always stored as BLOBs regardless of column affinity.
INSERT INTO t1 VALUES(x'0500', x'0500', x'0500', x'0500', x'0500');
-- NULLs are also unaffected by affinity
INSERT INTO t1 VALUES(NULL,NULL,NULL,NULL,NULL);
Вывод PRAGMA table_info(t1);
:
0|t|TEXT|0||0
1|nu|NUMERIC|0||0
2|i|INTEGER|0||0
3|r|REAL|0||0
4|no|BLOB|0||0
Вывод SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;
(обратите внимание, что каждое значение в столбце имеет свой тип данных):
text|integer|integer|real|text
text|integer|integer|real|real
text|integer|integer|real|integer
blob|blob|blob|blob|blob
null|null|null|null|null
person
qwr
schedule
23.10.2019