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

H2数据库2.1.214版本中VALUE作为字段名的报错解决方案咨询

解决H2 2.1.214版本中VALUE字段的语法错误问题(无法重命名字段)

问题背景

项目使用H2数据库做单元测试,升级至2.1.214版本后,执行如下建表语句时触发语法错误:

CREATE TABLE SRC_FIELD_VALUE
(
    ID NUMBER IDENTITY,
    INPUT_SRC_FIELD_REF_ID NUMBER,
    VALUE VARCHAR2(255),
    DESCRIPTION VARCHAR2(255)
);

错误日志如下:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE TABLE SRC_FIELD_VALUE ( ID NUMBER IDENTITY, INPUT_SRC_FIELD_REF_ID NUMBER, [*]VALUE VARCHAR2(255),            DESCRIPTION VARCHAR2(255) )"; expected "identifier"; SQL statement:
CREATE TABLE TC_RULE_COMP_DATA ( ID NUMBER IDENTITY, RULE_REF_ID NUMBER, SORT_ORDER NUMBER, VALUE CLOB ) [42001-214]

已在POM.xml中配置NON_KEYWORDS=VALUE,ID,且尝试给VALUE加双引号,问题仍未解决,且无法重命名字段。

可行解决办法

  • 确保NON_KEYWORDS参数正确传递:直接在JDBC URL中配置参数,而非仅依赖POM配置。例如:

    jdbc:h2:mem:testdb;MODE=Oracle;NON_KEYWORDS=VALUE,ID
    

    部分场景下POM中的配置可能无法正确传递到H2的连接实例,JDBC URL配置更直接可靠。

  • 使用反引号包裹关键字字段:将建表语句中的VALUE改为`VALUE`,H2支持反引号作为标识符分隔符,避免关键字冲突:

    CREATE TABLE SRC_FIELD_VALUE
    (
        ID NUMBER IDENTITY,
        INPUT_SRC_FIELD_REF_ID NUMBER,
        `VALUE` VARCHAR2(255),
        DESCRIPTION VARCHAR2(255)
    );
    

    双引号失效可能是因为H2在特定模式下会将双引号内的标识符视为区分大小写,而你的字段实际为大写,反引号无此限制。

  • 检查配置覆盖情况:确认项目中其他配置(如Spring Boot的application.properties、测试类中的连接参数)没有覆盖NON_KEYWORDS设置,确保参数最终被H2加载。

  • 临时降级H2版本:如果上述方法均无效,可临时降级至2.0.206等兼容版本,避免阻塞测试流程,后续再跟进H2官方的修复更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:04