SQLite 有这个“特性”,而即使你创建一个INTEGER
or类型的列REAL
,它也允许你在其中插入一个字符串,甚至是一个没有数字的字符串,比如“the quick fox jumped over the lazy dog”。
您如何防止在您的项目中发生这种插入?
我的意思是,当我的代码有一个错误导致这种插入或更新时,我希望程序给出一个错误,这样我就可以调试它,而不是简单地在我的数据库中插入垃圾。
SQLite 有这个“特性”,而即使你创建一个INTEGER
or类型的列REAL
,它也允许你在其中插入一个字符串,甚至是一个没有数字的字符串,比如“the quick fox jumped over the lazy dog”。
您如何防止在您的项目中发生这种插入?
我的意思是,当我的代码有一个错误导致这种插入或更新时,我希望程序给出一个错误,这样我就可以调试它,而不是简单地在我的数据库中插入垃圾。
CHECK
您可以使用约束来实现这一点(请参阅此处的先前答案)。这看起来像
CREATE TABLE T (
N INTEGER CHECK(TYPEOF(N) = 'integer'),
Str TEXT CHECK(TYPEOF(Str) = 'text'),
Dt DATETIME CHECK(JULIANDAY(Dt) IS NOT NULL)
);
更好更安全的方法是编写一个验证用户输入的函数(isNumeric、isString 等)...