Mysql INT字段默认为0且允许为空,传空值却失败?

2022-01-11 02:11:19
黄豆 UsualTool.com
编程思维/PHP 6061
loading

Mysql INT字段设置了允许为空且默认为0,然而传一个空值''却失败?

起因:

这是最近在UT框架中遇到的一个问题,有零散用户反映在某面板集成环境中安装UT模块出现无法创建数据的现象,起初我们是建议用户换一个面板问题便解决。等空闲之后细心研究发现:程序没问题、MYSQL字段设置也没问题,在这个面板中确实存在无法创建数据的问题,经过梳理和测试,发现某个INT字段若是传值没问题,传空值却有问题(字段允许为空或不为空且默认为0的条件下)。

问题:

有些时候我们需要某些INT字段为空或默认为0(无论是否有值,程序上都进行了该字段的入库),这是一种不太严格的方式,但MYSQL5+版本默认配置了INT不得传递空值(无论你允许为空还是不为空)。经过翻阅资料,发现sql-mode这个节点配置值中有STRICT_TRANS_TABLES这一项,即严格模式,那么问题便好解决了。

解决:

此问题有2种解决方案:

  1. 程序上不允许传空值,入库前对值进行判断,为空时,给一个默认值再入库。

  2. 去除Mysql配置sql-mode中关于STRICT_TRANS_TABLES的项。

    win下修改my.ini中sql-mode值为:NO_ENGINE_SUBSTITUTION        

    Linux下修改my.conf中sql-mode值为:NO_ENGINE_SUBSTITUTION        

+分享给朋友+
郑重提醒:部分素材来源于互联网,如果侵犯了您的权利,请及时联络我们更正,谢谢合作,电邮:usualtool@qq.com