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等)...