我通过编写一些SQLite文档,第一次搞乱了SQLite。特别是,我在Sourceforge上使用Command Line Shell For SQLite和SoupToNuts SQLite Tutorial。
根据SQLite datatype documentation,SQLite中只有5种数据类型。但是,在上面的两个教程文档中,我看到作者使用命令的位置,如
create table tbl1(one varchar(10), two smallint);
create table t1 (t1key INTEGER PRIMARY KEY,data TEXT,num double,timeEnter DATE);
包含SQLite未列出的数据类型,但这些命令运行正常。
此外,当我运行.dump查看SQL语句时,会保留这些数据类型规范:
sqlite> CREATE TABLE Vulnerabilities (
...> VulnerabilityID unsigned smallint primary key,
...> VulnerabilityName varchar(10),
...> VulnerabilityDescription longtext);
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE Vulnerabilities (
VulnerabilityID unsigned smallint primary key,
VulnerabilityName varchar(10),
VulnerabilityDescription longtext);
COMMIT;
sqlite>
那么,是什么给出的? SQLite是否为SQL中指定的任何数据类型保留了引用,并将其在后台转换为其5种数据类型之一?或者还有其他我想念的东西?
答案 0 :(得分:3)
SQLite uses dynamic typing。
SQLite允许您在该VARCHAR(10)列中插入一个整数
如果在该列中插入长度超过10个字符的字符串,SQLite不会抱怨。
正如el.pescado所提到的,SQLite的存储类是AKA“亲缘关系”
如果您尝试插入属于a particular affinity的列,则SQLite将尝试转换该值以匹配关联。
如果转换不起作用,则按原样插入值。
因此,当您将更精细的数据类型保存(显然)到元数据表时,SQLite不会使用它们。
答案 1 :(得分:0)
没有五种数据类型,而是“真实”数据类型所属的5种数据类型“类”。因此,TINYINT,SMALLINT和BIGINT是三种不同的数据类型,但都属于INTEGER存储类。