最近發現在進行線程操作時,發現數據庫的unsigned字段減為負數時並未報錯而是變為0,因此去尋找解決方案,發現這和我的sql_mode有關。
sql_mode MySQL服務器可以以不同的SQL模式來操作,並且可以為不同客戶端應用不同模式。這樣每個應用程序可以根據自己的需求來定制服務器的操作模式
SELECT @@sql_mode
用此可以查詢當前mysql的數據庫模式,一般情況下是顯示STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION此三個屬性,且是嚴格模式,
即出現數據錯誤會立即報錯.但我的mysql初始模式下是只有NO_ENGINE_SUBSTITUTION並不會約束字段的錯誤,即出現負值,數據庫不是報錯而是置0;
下面即如何修改sql_mode
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
其中global表示全局設置,同理用SESSION表示會話模式下即當前的會話情況下數據庫模式。
設置 GLOBAL變量時需要擁有權限,並且會影響從那時起連接的所有客戶端的操作。
設置SESSION變量只影響當前的客戶端。任何客戶端可以隨時更改自己的會話 sql_mode值
其他的情況還有很多種可以根據需求自己設置
另附上找到的資料鏈接:https://www.cnblogs.com/linguoguo/p/6487097.html
