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:编辑配置文件

  1. 使用文本编辑器打开配置文件(以 mysqld.cnf 为例):

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 在 [mysqld] 部分添加 sql_mode

    [mysqld]
    sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
    • 如果 [mysqld] 已存在其他配置,直接追加这一行。

    • 如果配置文件中已有 sql_mode 行,直接修改它的值。

  3. 保存并退出

    • Nano 编辑器:按 Ctrl+O 保存 → 按 Ctrl+X 退出。

    • Vim 编辑器:按 Esc → 输入 :wq → 回车。


步骤 3:重启 MySQL 服务

sudo systemctl restart mysql

步骤 4:验证修改是否生效

  1. 登录 MySQL

    mysql -u root -p
  2. 查询当前 sql_mode

    SELECT @@sql_mode;

    输出应包含你设置的参数,且不包含 STRICT_TRANS_TABLES 或 NO_ZERO_DATE


常见问题解决

  1. 配置文件未生效

    • 确保修改的是 [mysqld] 部分的配置。

    • 检查是否有多个配置文件冲突(如 my.cnf 覆盖了 mysqld.cnf)。

  2. 权限问题

    • 使用 sudo 编辑配置文件。

    • 重启服务时确保有管理员权限。

  3. 语法错误

    • 检查 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值