遇到 [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
尝试设为NULL
12。 - 解决方法:
- 打开 SQL 文件,搜索
TIME_ZONE
或@OLD_TIME_ZONE
。 - 删除以下语句(通常位于文件末尾):
sqlCopy Code
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
- 重新导入修改后的 SQL 文件。
- 打开 SQL 文件,搜索
2. 检查 MySQL 配置参数
- 问题原因:若 SQL 文件过大或包含长语句,可能因
max_allowed_packet
参数过小导致写入失败,间接引发变量设置错误34。 - 解决方法:
- 修改 MySQL 配置文件(
my.cnf
或my.ini
),在[mysqld]
段增加:iniCopy Code
max_allowed_packet=256M
- 重启 MySQL 服务:
bashCopy Code
systemctl restart mysql
- 验证参数是否生效:
sqlCopy Code
SHOW VARIABLES LIKE 'max_allowed_packet';
- 修改 MySQL 配置文件(
3. 手动设置时区变量
- 问题原因:若 SQL 文件依赖时区变量但未正确初始化,可手动设置默认时区67。
- 解决方法:
- 在导入 SQL 文件前,执行以下命令:
sqlCopy Code
SET GLOBAL time_zone = '+08:00'; -- 设置为东八区(北京时间)
- 或在 MySQL 配置文件中添加:
iniCopy Code
[mysqld] default-time-zone = '+08:00'
- 在导入 SQL 文件前,执行以下命令:
注意事项
- 优先尝试 删除注释 的方案,多数情况下可直接解决问题12。
- 若同时出现类似
sql_mode
的报错,需检查 SQL 文件中所有SET
语句的注释部分5。 - 导出 SQL 文件时,建议使用
mysqldump
并添加--skip-comments
选项避免生成冗余注释2