MySQL 取消严格模式的两种方法

MySQL 严格模式下,字段超长、非法值、缺默认值都会直接报错而不是警告,老项目导入数据时经常被卡住。本文记录两种关闭方式:修改配置文件与修改启动脚本。

方法一:修改 my.cnf

直接向配置文件追加 sql-mode 行,只保留 NO_AUTO_CREATE_USER 与 NO_ENGINE_SUBSTITUTION 两项,等于关闭严格校验:

echo "sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" >> /etc/my.cnf

写入后 /etc/my.cnf 中对应的配置内容如下:

sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO

重启服务使配置生效:

service mysqld restart
图片[1]-MySQL怎样取消严格模式-本站

方法二:修改 mysqld 启动脚本

有些环境 my.cnf 不生效,启动参数被 init 脚本写死。这时可以直接修改 /etc/init.d/mysqld,用 sed 把启动参数替换为指定的 sql-mode:

sed -i "s#"$*"#--sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"#" /etc/init.d/mysqld

修改完成后,脚本里的关键行如下:

other_args="--sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

同样需要重启服务:

service mysqld restart

注意事项

  • 动手前先备份 my.cnf 与启动脚本,改坏了可以立刻回滚。
  • 验证是否生效:登录数据库执行 SHOW VARIABLES LIKE ‘sql_mode’,确认返回值已不含严格校验相关模式。
  • sql_mode 的可选值在不同 MySQL 版本间存在差异,跨大版本使用这套配置前先确认参数仍被识别,避免服务起不来。
  • 关闭严格模式只是把报错降级为静默处理,异常数据会被截断或置为默认值;批量导入结束后建议评估是否恢复原模式。
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容