mysql的unsigned屬性負值報錯和為0情況及mysql的嚴格模式


最近發現在進行線程操作時,發現數據庫的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM