在SQLite3中创建表时,当遇到意味着类似内容的所有可能数据类型时,我会感到困惑,所以有人能告诉我以下数据类型之间的区别吗?
INT, INTEGER, SMALLINT, TINYINT DEC, DECIMAL LONGCHAR, LONGVARCHAR DATETIME, SMALLDATETIME
是否有某些文件列出了最小/最大值.各种数据类型的能力?例如,我猜smallint
的最大值大于tinyint
,但值小于整数,但我不知道这些容量是什么.
SQLite
从技术上讲,没有数据类型,清单打字系统中有存储类,是的,如果你习惯了传统的RDBMS
es ,那就太混乱了.内部的所有内容都存储为文本.基于亲和力(分配给列的ala数据类型)将数据类型强制/转换为各种存储位置.
我建议你做的最好的事情是:
暂时忘记您曾经了解的有关独立数据库数据类型的所有内容
从SQLite
网站上阅读上面的链接.
根据旧架构获取类型,并查看它们映射到的内容 SQLite
将所有数据迁移到SQLite
数据库.
注意:数据类型限制可能很麻烦,尤其是在您添加持续时间,日期或具有该性质的事物时SQL
.SQLite
对于那种事情,很少有内置函数.但是,SQLite
确实提供了一种简单的方法,您可以通过sqlite3_create_function
库函数创建自己的内置函数,以添加持续时间和此类事物.您将使用该工具代替传统的存储过程.
区别在于语法糖.只有少数类型名称的子串与类型亲和关系一样重要.
INT,INTEGER,SMALLINT,TINYINT→INTEGER亲和性,因为它们都包含"INT".
LONGCHAR,LONGVARCHAR→TEXT亲和力,因为它们包含"CHAR".
DEC,DECIMAL,DATETIME,SMALLDATETIME→NUMERIC,因为它们不包含任何重要的子串.
SQLite站点列出了确定关联性的规则.
如果您坚持严格键入,可以使用CHECK
约束来实现它:
CREATE TABLE T ( N INTEGER CHECK(TYPEOF(N) = 'integer'), Str TEXT CHECK(TYPEOF(Str) = 'text'), Dt DATETIME CHECK(JULIANDAY(Dt) IS NOT NULL) );
但我从不打扰它.
至于每种类型的容量:
INTEGER
总是签署64位.请注意,SQLite优化了幕后小整数的存储,因此TINYINT无论如何都不会有用.
REAL
总是64位(double
).
TEXT
并且BLOB
具有由预处理器宏确定的最大大小,默认值为1,000,000,000字节.
其中大多数都是兼容性的.你真的只有整数,浮点数,文本和blob.日期可以存储为数字(unix时间是整数,微软时间是浮点数)或文本.