【问题标题】:H2 Database query grammarH2数据库查询语法
【发布时间】:2021-01-21 05:38:27
【问题描述】:

我正在运行以下查询

SELECT * 
FROM USER_MODEL 
WHERE "name"  = "Administrator"

但是,我收到一条错误消息,不知道为什么该值也被视为列名。

未找到“管理员”列; SQL语句:

当我尝试使用单引号时。

SELECT * 
FROM USER_MODEL 
WHERE "name"  = 'Administrator' 

然后H2再次抱怨

不允许使用这种文字; SQL语句:

当名称没有用双引号括起来时。 H2 将列名转换为大写。

SELECT * 
FROM USER_MODEL 
WHERE name  = "Administrator"

未找到列“NAME”; SQL语句:

需要有关 H2 查询如何工作的帮助。

【问题讨论】:

    标签: sql h2


    【解决方案1】:

    您必须使用此查询

    SELECT * 
    FROM USER_MODEL 
    WHERE name = 'Administrator'
    

    【讨论】:

    • H2 不允许单引号。其次,如果我给出名称,它会将其转换为大写并搜索名称列。并给出错误。
    • 你确定吗? SQL 语法 (h2database.com/html/grammar.html#expression) 表明确实如此。
    • 是的,我确定.. :(
    【解决方案2】:

    所以,终于找到了解决方案,我不得不执行 SET ALLOW_LITERALS ALL。允许在我的查询中使用单引号。

    默认情况下,h2 已禁用此功能以防止 SQL 注入。

    【讨论】:

    • 在 H2 中默认所有字面量都是允许的,这样的错误信息只有在显式禁用时才会出现。
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2021-06-30
    • 1970-01-01
    • 2020-08-12
    相关资源
    最近更新 更多