MySQL 8.x日期格式0000-00-00报错问题

5.7 数据迁移至 8.x 报错

由于MySQL的严格模式(STRICT MODE)导致的。MySQL的严格模式不允许日期为’0000-00-00’。你可以通过以下方法来解决这个问题:

临时方法:

  1. 修改原始数据 如果可以修改源数据文件,将其中所有的’0000-00-00’日期改为一个有效的日期值(例如’1000-01-01’)或NULL

  2. 在导入数据前禁用NO_ZERO_DATE模式: 在MySQL 8.x中执行以下命令以当前会话禁用NO_ZERO_DATE SQL模式:

    1
    SET @@session.sql_mode=REPLACE(@@session.sql_mode, 'NO_ZERO_DATE', '');
  3. 导入数据 现在,您可以开始导入数据。使用SOURCE命令或mysql客户端工具来导入数据。例如:

    1
    mysql -u <username> -p<password> <database_name> < /path/to/your/data.sql
  4. 恢复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服务器以使新的设置生效。