天天看點

mysql嚴格模式有什麼作用_當啟用嚴格模式時,MySQL會做什麼驗證?

我很驚訝,當MySQL允許我在一個使用NOT NULL建立的字段中插入一個NULL。我做了一些研究,發現如何啟用嚴格的模式。但是,我不太清楚,當啟用STRICT_ALL_TABLES時,MySQL會做什麼驗證。

手冊說:

Strict mode controls how MySQL handles input values that are invalid or missing. A value can be invalid for several reasons. (emphasis mine) For example, it might have the wrong data type for the column, or it might be out of range.

我明白它認為缺少什麼,以及它如何處理。我不清楚它認為是無效的。我做了一些測試,發現了以下内容:

>太長的字元串無效

>超出範圍的數字無效

>非NULL列的NULL是無效的

> TRUE和FALSE總是似乎有效(它們分别變為1和0)

>無效日期無效

>零日期有效(可以啟用其他模式來更改此行為)

>在整數字段中浮動是有效的(它們得到四舍五入)

>數字字段中的字母無效

除了上述内容之外,MySQL是否進行其他任何驗證檢查?

該手冊說“錯誤的資料類型的列”,但我看到的唯一情況,這實際上發揮作用是一個數字字段中的字母。還有其他資料類型錯誤的示例嗎?

MySQL有什麼功能可以檢查什麼?

編輯:為了記錄,我的應用程式已經進行了廣泛的驗證。我正在使用嚴格模式作為最後機會,即時檢查。如果我忘了檢查一下,我希望它能夠快速失敗,而不是“默默地篡改我的資料”。