SQLite的有这个"feature"而即使当您创建INTEGER
类型或REAL
的列,它允许你插入一个字符串到它,即使一个字符串没有在它的数字,像“快狐狸跳过了懒狗” 。如何避免在SQLite表中插入错误的数据类型?
你如何防止这种插入发生在你的项目中?
我的意思是,当我的代码有导致这种插入或更新的错误时,我希望程序给出一个错误,所以我可以调试它,而不是简单地在我的数据库中无声地插入垃圾。
SQLite的有这个"feature"而即使当您创建INTEGER
类型或REAL
的列,它允许你插入一个字符串到它,即使一个字符串没有在它的数字,像“快狐狸跳过了懒狗” 。如何避免在SQLite表中插入错误的数据类型?
你如何防止这种插入发生在你的项目中?
我的意思是,当我的代码有导致这种插入或更新的错误时,我希望程序给出一个错误,所以我可以调试它,而不是简单地在我的数据库中无声地插入垃圾。
您可以在此使用CHECK
约束(见previous answer here)执行。这看起来像
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等)...