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

H2数据库2.0.202版本MySQL模式下如何避免SQL语句使用反引号

问题原因

H2 2.0+版本新增了大量SQL标准保留关键字,你用到的name、value都属于新增的保留关键字,即使开启MySQL兼容模式,H2默认也会将识别到的保留关键字当做语法标识符处理,因此直接作为字段名使用会触发语法错误。

可用解决方案

不需要修改原有SQL语句,仅调整JDBC连接参数即可解决问题:

方案1:添加NON_KEYWORDS参数排除冲突关键字

这是影响范围最小、最推荐的方案,你只需要在连接串中添加NON_KEYWORDS配置,将所有和业务字段名冲突的保留关键字列进去即可,多个关键字用英文逗号分隔。
修改后的JDBC连接串如下:

"jdbc:h2:mem:database;TRACE_LEVEL_FILE=0;TRACE_LEVEL_SYSTEM_OUT=0;DATABASE_TO_UPPER=false;MODE=MySQL;NON_KEYWORDS=NAME,VALUE";

注意:NON_KEYWORDS后面的关键字需统一使用大写,即使你开启了DATABASE_TO_UPPER=false配置也不影响生效

方案2:使用H2的MySQL兼容扩展参数

如果你使用的H2版本≥2.1.210,还可以在连接串中添加DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH配置,和原有的MODE=MySQL搭配后可以最大程度对齐MySQL的标识符处理规则,MySQL本身允许非保留关键字直接作为字段名使用,这套配置可以覆盖绝大多数关键字冲突场景,不需要单独逐个指定排除的关键字。
修改后的JDBC连接串如下:

"jdbc:h2:mem:database;TRACE_LEVEL_FILE=0;TRACE_LEVEL_SYSTEM_OUT=0;DATABASE_TO_UPPER=false;MODE=MySQL;DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:00