MySQL8.0.28运行sql语句报错

文章讲述了在MySQL8中执行SQL语句时遇到保留字作为字段名导致的语法错误问题,以及两种解决办法:一是使用反引号包裹字段名,二是禁用严格模式(STRICT_TRANS_TABLES)。但禁用严格模式可能带来安全风险,应谨慎操作。
摘要由CSDN通过智能技术生成

例如此语句  MySQL8执行就会报错,MySQL5.7则不会报错

insert into order (type, system) values ( 2, '动力'); 

报错信息提示SQL语法错误,指出位于'系统'字段(system)前面的内容存在问题。是由于使用了MySQL保留字(Reserved Words)做为字段名造成的,例如在此例中使用了名为system的字段。

修改后

insert into order (type, `system`) values ( 2, '动力'); 

在此例子中,使用了反引号将'system'字段名括起来,以避免解析器将其识别为保留字。

也就是说 在mybatis中的mapper.xml中 所有的关键字、保留字 都需要使用反引号给引起来。

在网上搜索过一些教程 说是禁用掉MySQL8的严格模式就可以忽略此错误 

(我测试是没起作用,考虑到语法本身就是错误的而且为了安全 我就将所有mapper中的关键字、保留字都引起来了。如果有知道解决方法的 请评论 谢谢。)

MySQL 8.0版本提供了一个sql_mode参数来自定义MySQL的行为,这个参数可以设置为不检查关键字冲突。具体来说,你可以在MySQL 8.0中执行以下命令来禁用SQL模式STRICT_TRANS_TABLES,这样MySQL就会在插入时忽略掉无法转换为指定类型的值而不是抛出错误:

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

如果你需要一直禁用这种严格的语法检查,你可以修改MySQL的配置文件my.cnf或者my.ini,并在其中添加以下选项:

[mysqld]
sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

这些设置应该能够使MySQL 8.0版本不再报错关于未引用关键字的SQL语句。注意,如果您禁用了严格模式(STRICT_TRANS_TABLES),MySQL将不再对您输入的文本进行任何转义、转换或验证,可能会导致安全漏洞和其他问题。因此,一定要在权衡安全和方便性之后考虑使用这些设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋迟言说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值