我已经读过日期时间存储在sqlite中的Text,Real或Integer中,但是sqlitestudio将datetime列显示为Datetime,就像在下面的DDL中显示DATETIME列一样:
CREATE TABLE tblWeights (
uid STRING,
weight DOUBLE,
dt DATETIME,
printed INTEGER,
dispdt DATETIME,
transid INTEGER
);
怎么回事?
答案 0 :(得分:2)
你是如何创建该表的?
我猜测应用程序只显示创建表的DDL(由用户输入),而不是从元数据重构它。
为了兼容性,您可以声明列类型DATETIME
(among many others),并将其视为NUMERIC
(后者又是& #34;灵活的"类型,最终将根据数据的样子存储Text,Real,Integer,Null或Blob。)
答案 1 :(得分:2)
答案是因为这是在创建表格,改变表格和添加列时使用的。
实际上你可以拥有几乎任何东西的列类型(decalred),甚至像mycolumn rumplestiltskin NOT NULL
之类的东西,这将被记录/存储(类型亲和力将是NUMERIC)。正如SQLite所做的那样,应用一个算法,然后使用一些简单的规则应用INTEGER,TEXT,NUMERIC,REAL或BLOB的类型相关性: -
3.1。柱亲和力的确定柱的亲和力由柱的声明类型决定,根据 按照显示的顺序遵循规则:
如果声明的类型包含字符串“INT”,则分配它 INTEGER亲和力。
如果声明的列类型包含任何字符串“CHAR”, “CLOB”或“TEXT”然后该列具有TEXT亲和力。请注意 type VARCHAR包含字符串“CHAR”,因此分配了TEXT 亲和力。
如果列的声明类型包含字符串“BLOB”或如果否 指定了类型,然后该列具有关联BLOB。
如果列的声明类型包含任何字符串“REAL”, “FLOA”或“DOUB”然后该列具有REAL亲和力。
否则,亲和力为NUMERIC。
请注意,确定列关联性的规则的顺序是 重要。声明类型为“CHARINT”的列将与两者匹配 规则1和2,但第一个规则优先,因此列 亲和力将是INTEGER。 Datatypes In SQLite Version 3
但是,除了 rowid 或 rowid 本身的别名(必须具有唯一的INTEGER)之外,您可以存储任何类型的值在任何类型的列中。根据之前给出的链接,数据的存储方式(存储类)存在细微差别。