如何避免在 SQLite 表中插入错误的数据类型?
How to avoid inserting the wrong data type in SQLite tables?
SQLite 有这个 "feature" 而即使当你创建一个类型为 INTEGER
或 REAL
的列时,它也允许你向其中插入一个字符串,即使是一个没有数字的字符串它,就像 "the quick fox jumped over the lazy dog"。
您如何防止此类插入在您的项目中发生?
我的意思是,当我的代码有导致那种插入或更新的错误时,我希望程序给出错误,这样我就可以调试它,而不是简单地在我的数据库中静默插入垃圾。
更好更安全的方法是编写一个函数(isNumeric、isString 等)来验证用户输入...
您可以使用 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)
);
SQLite 有这个 "feature" 而即使当你创建一个类型为 INTEGER
或 REAL
的列时,它也允许你向其中插入一个字符串,即使是一个没有数字的字符串它,就像 "the quick fox jumped over the lazy dog"。
您如何防止此类插入在您的项目中发生?
我的意思是,当我的代码有导致那种插入或更新的错误时,我希望程序给出错误,这样我就可以调试它,而不是简单地在我的数据库中静默插入垃圾。
更好更安全的方法是编写一个函数(isNumeric、isString 等)来验证用户输入...
您可以使用 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)
);