[ERR] 1231 - Variable ‘time_zone‘ can‘t be set to the value of ‘NULL‘

遇到 [ERR] 1231 - Variable 'time_zone' can't be set to the value of 'NULL' 错误时,通常是由于 SQL 文件中的 TIME_ZONE 变量设置问题或 MySQL 配置问题导致的。以下是具体解决方案:


1. 删除 SQL 文件中的 TIME_ZONE 相关注释

  • 问题原因‌:SQL 文件末尾可能存在类似 /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 的注释语句,其中 @OLD_TIME_ZONE 未被正确赋值,导致 time_zone 尝试设为 NULL12。
  • 解决方法‌:
    1. 打开 SQL 文件,搜索 TIME_ZONE 或 @OLD_TIME_ZONE
    2. 删除以下语句(通常位于文件末尾):
      
      

      sqlCopy Code

      /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

    3. 重新导入修改后的 SQL 文件。

2. 检查 MySQL 配置参数

  • 问题原因‌:若 SQL 文件过大或包含长语句,可能因 max_allowed_packet 参数过小导致写入失败,间接引发变量设置错误34。
  • 解决方法‌:
    1. 修改 MySQL 配置文件(my.cnf 或 my.ini),在 [mysqld] 段增加:
      
      

      iniCopy Code

      max_allowed_packet=256M

    2. 重启 MySQL 服务:
      
      

      bashCopy Code

      systemctl restart mysql

    3. 验证参数是否生效:
      
      

      sqlCopy Code

      SHOW VARIABLES LIKE 'max_allowed_packet';


3. 手动设置时区变量

  • 问题原因‌:若 SQL 文件依赖时区变量但未正确初始化,可手动设置默认时区67。
  • 解决方法‌:
    1. 在导入 SQL 文件前,执行以下命令:
      
      

      sqlCopy Code

      SET GLOBAL time_zone = '+08:00'; -- 设置为东八区(北京时间)

    2. 或在 MySQL 配置文件中添加:
      
      

      iniCopy Code

      [mysqld] default-time-zone = '+08:00'


注意事项

  • 优先尝试 ‌删除注释‌ 的方案,多数情况下可直接解决问题12。
  • 若同时出现类似 sql_mode 的报错,需检查 SQL 文件中所有 SET 语句的注释部分5。
  • 导出 SQL 文件时,建议使用 mysqldump 并添加 --skip-comments 选项避免生成冗余注释2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值