You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL重启后sql_mode重置,如何永久禁用NO_ZERO_IN_DATE和NO_ZERO_DATE?

解决MySQL重启后sql_mode参数恢复的问题

这个问题我碰到过好多次啦!你用SET命令修改的sql_mode只是临时生效的——MySQL重启后会重新加载配置文件里的默认值,所以那些你禁用的参数自然又回来了。下面教你怎么永久修改:

步骤1:确认当前全局sql_mode

先登录MySQL,执行这条命令查看当前全局的参数配置,方便后续修改时参考:

SELECT @@GLOBAL.sql_mode;

步骤2:找到MySQL配置文件

不同系统的配置文件位置不一样:

  • Linux/Unix系统:常见路径是/etc/my.cnf/etc/mysql/my.cnf,Ubuntu系统可能在/etc/mysql/mysql.conf.d/mysqld.cnf
  • Windows系统:配置文件一般叫my.ini,大概率在MySQL安装目录,或者C:\ProgramData\MySQL\MySQL Server X.X(X.X为你的版本号,这个文件夹是隐藏的)

步骤3:修改配置文件

打开找到的配置文件,定位到[mysqld]段落(如果没有就手动添加这个段落),然后写入你需要的sql_mode参数,注意不要包含NO_ZERO_IN_DATENO_ZERO_DATE

[mysqld]
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

步骤4:重启MySQL服务

保存配置文件后,重启服务让修改生效:

  • Linux系统:执行命令 sudo systemctl restart mysql(老版本用 sudo service mysql restart
  • Windows系统:按Win+R输入services.msc打开服务管理器,找到MySQL服务右键重启;或者用命令提示符执行 net stop MySQL,停服后再执行 net start MySQL

步骤5:验证修改结果

重启后再次登录MySQL,执行以下命令确认参数已经永久生效:

SELECT @@GLOBAL.sql_mode;

此时输出里应该已经没有NO_ZERO_IN_DATENO_ZERO_DATE,而且下次重启服务器也不会再恢复啦!

补充说明:你之前用的SET sql_mode=...只修改了当前会话的参数,就算用SET GLOBAL sql_mode=...也只是在服务器运行周期内有效,只有修改配置文件才能实现永久生效。

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

火山引擎 最新活动