使用HeidiSQL导入MySQL的SQL文件报错1064怎么解决?
SQL Error (1064): You have an error in your SQL syntax; check the manual that correspondes to your MySQL server version for the right syntax to use near ‘curdate()) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC’ at line 17
问题原因
该报错属于MySQL语法错误,触发原因集中在两类:
- 最常见:你的MySQL服务版本低于8.0.13,不支持DATE类型字段使用
CURDATE()函数作为默认值。8.0.13之前仅TIMESTAMP、DATETIME两类时间类型支持动态函数默认值。 - 语法书写错误:SQL文件第17行前后的字段定义存在语法问题,比如前一个字段末尾漏写逗号、
CURDATE()被错误包裹了引号/反引号、字段列表括号不匹配等,导致SQL解析到curdate()位置时识别失败。
排查&解决步骤
- 第一步:用文本编辑器打开待导入的.sql文件,跳转至第17行,定位
curdate()所在的完整字段定义。 - 第二步:执行
SELECT VERSION();查询当前MySQL服务的版本号,匹配对应场景处理:场景1:版本低于8.0.13,DATE字段设置了
三选一解决即可:DEFAULT curdate()- 升级MySQL服务到8.0.13及以上版本,直接兼容原有语法
- 修改字段类型为DATETIME/TIMESTAMP,同步调整默认值:
-- 原错误写法示例 `create_date` date DEFAULT curdate(), -- 修改后写法 `create_date` datetime DEFAULT CURRENT_TIMESTAMP, - 移除该字段的默认值设置,改为业务代码插入数据时主动传入当前日期,或者新增插入触发器自动补全日期。
场景2:版本符合要求,存在语法错误
检查17行前后的字段定义:- 确认前一个字段定义末尾是否漏写英文逗号
- 确认
curdate()没有被单引号/双引号/反引号包裹,函数不需要加任何引号 - 确认CREATE TABLE的字段列表左右括号完整,没有多余符号
修改完语法问题后重新导入即可。
内容的提问来源于stack exchange,提问作者Musekwa
相关产品推荐
相关产品推荐

