You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

libmysql版本不同是否会导致MySQL字段默认值校验逻辑存在差异?

问题核心原因

你遇到的行为差异和libmysql版本无关,本质是两台机器的MySQL服务端sql_mode配置不一致:

  • 本地环境开启了严格模式,对NOT NULL无默认值的字段执行插入时未赋值会直接抛出1364错误,符合SQL标准规范
  • 生产环境未开启严格模式,遇到上述场景时会自动填充对应字段类型的隐式默认值(varchar类型填充空字符串''、数值类型填充0),不会抛出错误

验证方法

分别在本地、生产环境执行以下SQL查看当前生效的sql_mode:

SELECT @@sql_mode;

对比输出结果可以发现,生产环境的配置中缺少STRICT_TRANS_TABLES(针对事务引擎的严格模式)或STRICT_ALL_TABLES(针对所有引擎的严格模式)参数。

配置调整方案

如果需要让生产环境的校验逻辑和本地对齐,有两种调整方式:

  1. 永久生效:修改MySQL配置文件(一般为my.cnf或my.ini),在[mysqld]段落中修改sql_mode配置,添加严格模式参数,示例如下:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

修改后重启MySQL服务即可生效。
2. 临时生效(重启后失效):直接执行全局配置SQL:

SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

内容的提问来源于stack exchange,提问作者jeyzorus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:54:04