MySQL 8.x日期格式0000-00-00报错问题
5.7 数据迁移至 8.x 报错
由于MySQL的严格模式(STRICT MODE)导致的。MySQL的严格模式不允许日期为’0000-00-00’。你可以通过以下方法来解决这个问题:
临时方法:
-
修改原始数据 如果可以修改源数据文件,将其中所有的’0000-00-00’日期改为一个有效的日期值(例如’1000-01-01’)或
NULL
。 -
在导入数据前禁用
NO_ZERO_DATE
模式: 在MySQL 8.x中执行以下命令以当前会话禁用NO_ZERO_DATE
SQL模式:1
SET @@session.sql_mode=REPLACE(@@session.sql_mode, 'NO_ZERO_DATE', '');
-
导入数据 现在,您可以开始导入数据。使用
SOURCE
命令或mysql
客户端工具来导入数据。例如:1
mysql -u <username> -p<password> <database_name> < /path/to/your/data.sql
-
恢复
NO_ZERO_DATE
模式(可选) 如果您想要重新启用NO_ZERO_DATE
模式,可以使用以下命令:1
SET @@session.sql_mode=CONCAT_WS(',', @@session.sql_mode, 'NO_ZERO_DATE');
请注意,这种方法仅适用于当前会话。如果您在其他会话中导入数据,需要再次禁用NO_ZERO_DATE
模式。
永久方法:
修改MySQL的配置文件 : 如果你想要永久地关闭严格模式,你可以修改MySQL的配置文件。配置文件通常位于’/etc/my.cnf’或者’/etc/mysql/my.cnf’。在配置文件中,找到’[mysqld]'部分,添加或修改以下行:
1 | sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
然后,你需要重启MySQL服务器以使新的设置生效。