我在sitepoint.com上的教程中创建了一个表
CREATE TABLE comments (
post_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
website TEXT NULL,
comment TEXT NOT NULL );
然后我尝试添加一列
ALTER TABLE comments
INSERT COLUMN enabled BOOL
然后我意识到SQLite中没有BOOL
类型。但是条目被添加
sqlite> .schema comments
CREATE TABLE comments (
post_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
website TEXT NOT NULL,
comment TEXT NOT NULL , enabled BOOL);
为什么SQLite不反对?
答案 0 :(得分:4)
根据http://www.sqlite.org/datatype3.html#affname:
列的亲和力由声明的列类型决定,按照以下规则显示:
如果声明的类型包含字符串“INT”,则会为其指定INTEGER亲和力。
如果声明的列类型包含任何字符串“CHAR”,“CLOB”或“TEXT”,则该列具有TEXT亲和性。请注意,VARCHAR类型包含字符串“CHAR”,因此分配了TEXT affinity。
如果列的声明类型包含字符串“BLOB”,或者未指定类型,则该列具有关联BLOB。
如果列的声明类型包含任何字符串“REAL”,“FLOA”或“DOUB”,则该列具有REAL亲和力。
- 醇>
否则,亲和力为NUMERIC。
基本上,您可以对列使用任何声明的类型,其亲和力将由上述规则确定。具有BOOL
声明类型的列将具有NUMERIC
亲和力。
答案 1 :(得分:1)
要使它变短sqlite会尝试找到最相关的类型,即使它与官方的类型不匹配。这是出于与其他数据库的兼容性原因而完成的。