SQLite不关心`varchar`长度。 `char`长度是一样的吗?

时间:2014-10-13 05:39:48

标签: sqlite

当我从cmd(Windows)运行sqlite3 foo.db并输入这些命令时(假设TABLE' test'不存在):

sqlite> CREATE TABLE test (id integer PRIMARY KEY, name char(1));    
sqlite> INSERT INTO test (name) VALUES ('aaaaaa');

没有错误。要验证,

//Input
sqlite> SELECT * FROM test;  

//Output
1|aaaaaa   

再次,验证,

sqlite> .schema test    
CREATE TABLE test (id integer PRIMARY KEY, name char(1)); //output    

并且架构没有改变。

是否存在问题,尤其是name char(1)部分?为了记录,我使用MinGW64和

编译了SQLite3
--host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw // where /mingw is included in my PATH    

提前致谢。

2 个答案:

答案 0 :(得分:2)

作为there is no types in SQLite,这个问题毫无意义。所有TEXT值都相同,并存储为“无限制”(最多为SQLITE_MAX_LENGTH)长度字符串。

答案 1 :(得分:0)

您看到的是WAD:"按设计工作"。

SQLite不会强制执行char(n)或varchar(n)列的长度,因为它在CREATE TABLE语句中声明。但是您可以使用CHECK约束强制执行长度限制。

sqlite> create table test (
   ...> id integer primary key,
   ...> name char(1),
   ...> check (length(name)<=1)
   ...> );
sqlite> INSERT INTO test (name) VALUES ('aaaaaa');
Error: CHECK constraint failed: test