MySQL 8.0 新增保留关键字踩坑

MySQL 8.0 新增保留关键字踩坑

背景

许多产品都是基于MySQL 5.7开发的,其中表名、字段名也许会用到MySQL8.0里新增的保留关键字,那么当项目上从MySQL 5.7升级到MySQL8.0后,就容易出现因为保留关键字引发的SQL语法错误。

问题示例

CREATE TABLE `emp` (

                       `id` int(11) NOT NULL,

                       `system` text,

                       PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 

select id,system from emp

MySQL5.7环境表结构如下,其中包含system字段,查询正常

将MySQL5.7 升级到MySQL8.0后,再次查询,会发现SQL报错

ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 
 'system from emp' at line 1 

原因

MySQL里SQL报错的原因是,system是MySQL8.0里新增加的保留关键字,必须要加上反引号``才能被识别到。

总结

很多老项目后面都会有升级MySQL8.0的需求,一旦遇到这种问题,就需要修改代码,要么给字段添加反引号查询,要么就直接替换字段名,都非常麻烦,所以最好在开发环节就避免掉。下面列举了MySQL8.0新增保留关键字

MySQL8.0新增保留关键字

CUME_DIST、DENSE_RANK、EMPTY、EXCEPT 、FIRST_VALUE、GROUPING、GROUPS 、JSON_TABLE、LAG 、LAST_VALUE、LATERAL 、LEAD、NTH_VALUE、NTILE 、OF、OVER 、PERCENT_RANK 、RANK、RECURSIVE、ROW_NUMBER、SYSTEM 、WINDOW

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值