为什么在sqllite3下创建表SQL工作?

时间:2018-02-09 19:33:47

标签: sqlite

我不明白为什么这个查询(不正确)不会引起任何错误:

CREATE TABLE test (
  ID, 
  VARIANT riri fifi lili,
  PRIMARY KEY(ID, VARIANT ASC))

与他们的任何区别也是:

  VARIANT TINYINT
  VARIANT INTEGER
  VARIANT BIGINT
  VARIANT UNSIGNED INTEGER

1 个答案:

答案 0 :(得分:2)

SQLite有一组受限制的列类型(列关联)(TEXT,NUMERIC,INTEGER,REAL和BLOB)。但是,它几乎可以接受任何列类型(请参阅下面的SQLite列类型的灵活/限制),并根据一组规则将其转换为一组受限制的列类型: -

  • 如果列类型包含INT,则它会将其转换为INTEGER。
  • 如果列类型包含CHAR,CLOB或TEXT,则它会将其转换为TEXT。
  • 如果列类型包含BLOB,则它会将其转换为BLOB。
  • 如果列类型包含REAL,FLOA或DOUB,则它会将其转换为REAL。
  • 否则会将其转换为NUMERIC。

因此riri fifi lili的列类型为NUMERIC (直到最后一条规则)

TINYINTINTEGERBIGINTUNSIGNED INTEGER都会有一个列类型为INTEGER (因为它们都包含INT并符合第一条规则)< / em>的

如果是INTEGER(它符合第一条规则),

CHARINT将有一个列类型。

说一个列实际上可以包含任何类型,尽管列的类型(亲和力)在检索数据时可能会有细微的细微差别(请参阅下面的SQLite3中的数据类型)请注意,这是一个例外,它是rowid的别名。

可在此处找到更全面的答案How flexible/restricive are SQLite column types?

您可能还想查看Datatypes In SQLite Version 3