为什么SqliteStudio在其Create Table语句中显示DATETIME列

时间:2018-05-08 10:33:12

标签: sqlite sqlitestudio

我已经读过日期时间存储在sqlite中的Text,Real或Integer中,但是sqlitestudio将datetime列显示为Datetime,就像在下面的DDL中显示DATETIME列一样:

CREATE TABLE tblWeights (
    uid         STRING,
    weight      DOUBLE,
    dt          DATETIME,
    printed     INTEGER,
    dispdt      DATETIME,
    transid     INTEGER
);

怎么回事?

2 个答案:

答案 0 :(得分:2)

你是如何创建该表的?

我猜测应用程序只显示创建表的DDL(由用户输入),而不是从元数据重构它。

为了兼容性,您可以声明列类型DATETIMEamong 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)之外,您可以存储任何类型的值在任何类型的列中。根据之前给出的链接,数据的存储方式(存储类)存在细微差别。