SQLITE日期未检查类型
我刚刚测试了sqlite并创建了一个表SQLITE日期未检查类型,sql,sqlite,date,Sql,Sqlite,Date,我刚刚测试了sqlite并创建了一个表 $sqlite3 plop.db sqlite> CREATE TABLE t (d DATE); sqlite> INSERT INTO t (d) VALUES ('Hello'); sqlite> PRAGMA table_info(t); 0|a|DATE|0||0 sqlite> SELECT * FROM t; Hello 那么,当我尝试在日期中插入字符(5)时,为什么没有错误呢?来自Sqlite的 SQLit
$sqlite3 plop.db
sqlite> CREATE TABLE t (d DATE);
sqlite> INSERT INTO t (d) VALUES ('Hello');
sqlite> PRAGMA table_info(t);
0|a|DATE|0||0
sqlite> SELECT * FROM t;
Hello
那么,当我尝试在日期中插入字符(5)时,为什么没有错误呢?来自Sqlite的
SQLite允许我在integer类型的数据库列中插入字符串
这是一个特性,不是bug。SQLite使用动态类型。事实并非如此
强制执行数据类型约束。任何数据都可以插入到任何
专栏。可以将任意长度的字符串放入整数列,
布尔列中的浮点数或字符中的日期
柱。为CREATE表中的列指定的数据类型
命令不限制可以将哪些数据放入该列。每一个
列可以容纳任意长度的字符串。(有一个
例外:INTEGER主键类型的列只能包含64位
带符号整数。如果您尝试放置任何其他内容,将导致错误
将整数转换为整数主键列。)
但是SQLite使用声明的列类型作为提示
首选该格式的值。例如,如果一列是
键入INTEGER并尝试在该列中插入一个字符串SQLite
将尝试将字符串转换为整数。如果可以的话,我会的
而是插入整数。如果不是,则插入字符串。这
该特性称为类型关联
SQLite日期类型具有数值关联性。尽管名称不同,数值关联允许存储所有五个存储类(NULL、INTEGER、REAL、TEXT和BLOB)的数据。具有数值相关性的列(例如日期列)首先尝试将任何文本数据转换为整数和实数。如果可以进行这种转换,它将分别使用整数或实数存储类存储数据。如果无法进行转换,则使用文本存储类存储数据。这就是你的情况。看