Ubuntu 系统中修改 MySQL 的 sql_mode
在 Ubuntu 系统中修改 MySQL 的 sql_mode
需要编辑 MySQL 的配置文件并重启服务。以下是详细步骤:
步骤 1:定位 MySQL 配置文件
MySQL 配置文件通常位于以下路径之一(具体取决于安装方式):
-
/etc/mysql/my.cnf
-
/etc/mysql/mysql.conf.d/mysqld.cnf
(APT 安装的默认路径) -
/etc/mysql/mysql.conf.d/mysqld_safe_sql_mode.cnf
使用以下命令查找配置文件:
sudo grep -R "sql_mode" /etc/mysql/
步骤 2:编辑配置文件
-
使用文本编辑器打开配置文件(以
mysqld.cnf
为例):sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
-
在
[mysqld]
部分添加sql_mode
:[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
-
如果
[mysqld]
已存在其他配置,直接追加这一行。 -
如果配置文件中已有
sql_mode
行,直接修改它的值。
-
-
保存并退出:
-
Nano 编辑器:按
Ctrl+O
保存 → 按Ctrl+X
退出。 -
Vim 编辑器:按
Esc
→ 输入:wq
→ 回车。
-
步骤 3:重启 MySQL 服务
sudo systemctl restart mysql
步骤 4:验证修改是否生效
-
登录 MySQL:
mysql -u root -p
-
查询当前
sql_mode
:SELECT @@sql_mode;
输出应包含你设置的参数,且不包含
STRICT_TRANS_TABLES
或NO_ZERO_DATE
。
常见问题解决
-
配置文件未生效:
-
确保修改的是
[mysqld]
部分的配置。 -
检查是否有多个配置文件冲突(如
my.cnf
覆盖了mysqld.cnf
)。
-
-
权限问题:
-
使用
sudo
编辑配置文件。 -
重启服务时确保有管理员权限。
-
-
语法错误:
-
检查
sql_mode
值中的逗号和双引号是否使用英文符号。 -
避免拼写错误(如
ONLY_FULL_GROUP_BY
不要写成ONLY_FULL_GROUP_BY
)。
-
附加:临时修改 SQL 模式(无需重启)
如果只需临时修改(重启后失效):
-- 当前会话生效
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';-- 全局生效(直到下次重启)
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
注意事项
-
数据一致性风险:关闭严格模式(如
STRICT_TRANS_TABLES
)可能导致无效数据被插入,建议优先修复数据或表结构。 -
多环境同步:如果这是生产服务器,确保开发/测试环境的
sql_mode
配置一致。
通过以上步骤,你可以永久修改 MySQL 的 sql_mode
以屏蔽日期错误问题。
2 / 2