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

H2数据库1.4.182版本:SELECT为KEYWORD,SET却为IDENTIFIER的原因?

H2 1.4.182中SELECT与SET的关键字判定差异原因
  • SQL标准与数据库实现的差异:SQL标准里SELECT是核心查询类的保留关键字,属于必须严格识别的范畴;而SET在标准中属于“条件性关键字”——只有在特定上下文(比如SET variable = value这类会话配置、变量赋值语句)中才会被当作关键字。H2 1.4.182版本的解析器设计中,没有将SET标记为全局保留关键字,默认场景下会被识别为标识符。

  • H2版本的语法规则设计:在H2 1.4.182的语法定义逻辑里,SELECT被明确列入全局保留关键字列表,而SET仅被定义为特定语句(如SET SCHEMA、SET AUTOCOMMIT)中的触发关键字,不在全局保留关键字范畴。这种设计是为了兼容更多自定义标识符场景——比如允许用户创建名为SET的表或列,而不会触发语法错误。

  • 上下文依赖的解析逻辑:H2的SQL解析器采用上下文驱动的识别方式:当解析器处于查询语句起始位置时,会优先匹配SELECT这类核心关键字;而SET只有在解析器进入“会话配置”“变量赋值”这类特定上下文时,才会被当作关键字处理,否则会被当作普通标识符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:52:02