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

原文地址:https://www.cnblogs.com/lin530/p/11755341.html