执行时在type 列中看到的内容:
PRAGMA table_info(tablename)
或:
SELECT * FROM pragma_table_info('tablename');
是用于在CREATE TABLE 语句中定义列的数据类型。
SQLite 允许使用任何东西(甚至什么都没有),只要它不是保留字,作为数据类型。
这个:
CREATE TABLE tablename (
column0 integer primary key,
column1 integer,
column2 text,
column3 real,
column4 string,
column5 something,
column6 Jack,
column7, -- no data type defined
column8 real char int -- ??,
column9 datetime
);
是一个有效的陈述!
根据上述所有列定义,SQLite 将仅对定义为 integer primary key 的列 column0 强制执行类型检查。
来自Datatypes In SQLite Version 3/Storage Classes and Datatypes:
SQLite 版本 3 数据库中的任何列,INTEGER PRIMARY 除外
KEY 列,可用于存储任何存储类的值。
当您将列定义为 datetime 时,不要期望 SQLite 能够理解您的意图并设置任何内部约束,以便您存储在其中的值类似于日期时间。
实际上,按照Determination Of Column Affinity 中描述的规则,此列将具有NUMERIC 亲和力。
当然,您可以使用 INTEGER、REAL 或 TEXT 数据类型将日期时间值存储在列中,如 Date and Time Datatype 中所述,具体取决于您想要的日期时间形式:@987654337 @s、Julian day numbers 或 ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS") 分别为字符串。
总之,SQLite 永远不会抱怨定义为任何数据类型的任何列中的任何值(integer primary key 除外)。
您有责任确保以正确的格式存储值,以便您可以读取/写入、进行计算、比较等。
例如,切勿以"YYYY-MM-DD HH:MM:SS.SSS" 以外的任何其他格式存储文本日期时间,因为所有SQLite's datetime functions 都只能使用这种格式。