MySQL 5.7可正常运行的SQL在8.0版本报1064语法错误如何解决?
错误原因
rank是MySQL 8.0版本新增的保留关键字,用于支持RANK()窗口函数的语法解析。而在MySQL 5.7版本中rank不属于保留关键字,因此可以直接作为字段名使用,不会触发语法报错。- 你提交的SQL语句未对作为字段名的
rank做特殊处理,直接拼接在字段列表中,不符合8.0版本的语法规则,因此抛出1064语法错误。
解决方案
你可以选择任意一种方式修复:
- 方案一:保留现有字段名,使用反引号包裹
rank字段,规避保留字校验,修改后的SQL如下:
INSERT IGNORE INTO user_predicts (id,points,`rank`,rid,uid,win_count) VALUES (0,0,0,1,1016,0)
- 方案二:彻底避免保留字冲突,将表中
rank字段重命名为非保留关键字,例如rank_val、ranking等,后续所有涉及该字段的SQL同步修改字段名即可。
内容的提问来源于stack exchange,提问作者F.Flamel
相关产品推荐
相关产品推荐

