You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0升级后如何在JDBC连接字符串中设置SQL mode?

解决MySQL 8.0 JDBC连接字符串中设置SQL Mode的问题

这个错误是因为MySQL 8.0对应的Connector/J 8.x驱动对连接字符串的语法解析变得更严格了,你之前5.7里用的sessionVariables=sql_mode=''写法里的单引号嵌套会被驱动误判为格式错误——它会把第一个单引号当作参数值的起始,后面的='')就成了无效的语法片段,自然抛出解析错误。

下面是几种可行的解决方法:

方法1:URL编码转义单引号

把连接字符串里的单引号替换为URL编码的%27,这样驱动就能正确解析空SQL Mode的设置了:

jdbc:mysql://[host:port]/[database]?sessionVariables=sql_mode=%27%27

方法2:直接设置具体SQL Mode值(无嵌套单引号)

如果你需要设置非空的SQL Mode,直接写值即可,不需要额外嵌套单引号,比如关闭引擎替换限制:

jdbc:mysql://[host:port]/[database]?sessionVariables=sql_mode=NO_ENGINE_SUBSTITUTION

如果要设置多个SQL Mode规则,用逗号分隔:

jdbc:mysql://[host:port]/[database]?sessionVariables=sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

方法3:使用sql_mode直接参数(推荐,Connector/J 8.0.13+支持)

从Connector/J 8.0.13版本开始,驱动支持直接用sql_mode参数来设置,写法更简洁直观:
设置空SQL Mode:

jdbc:mysql://[host:port]/[database]?sql_mode=''

设置具体值:

jdbc:mysql://[host:port]/[database]?sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

额外注意事项

  • 务必确保你使用的是适配MySQL 8.0的JDBC驱动(mysql-connector-java 8.x版本),5.x驱动和8.0实例存在诸多兼容性问题,不建议混用。
  • 如果需要同时设置多个连接参数,记得用&分隔,比如同时指定时区和SQL Mode:
jdbc:mysql://[host:port]/[database]?serverTimezone=UTC&sql_mode=%27%27

内容的提问来源于stack exchange,提问作者Fernet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:22:42