【问题标题】:SQL syntax error in H2 Database when inserting array插入数组时 H2 数据库中的 SQL 语法错误
【发布时间】:2019-12-13 01:07:28
【问题描述】:

我实际上是在尝试将数据插入 H2 数据库。启动应用程序服务器时,收到 SQL 语法错误异常。我真的不确定H2数据库是否支持在列中插入数组?下面的sql语句有问题吗? H2 数据库是否支持任何数组数据类型 float[]、String[]...?

INSERT INTO weather (id,date,temperature) values ('1','2019-09-11','{"37.3","36.8","36.4"}');

CREATE TABLE WEATHER(
id INT AUTO_INCREMENT PRIMARY KEY,
date DATE,
temperature text[]
);

【问题讨论】:

标签: java database hibernate spring-boot h2


【解决方案1】:
  1. 您不能在 H2 和其他数据库中使用 PostgreSQL 样式的 text[] 作为数据类型。 H2 具有数组的 ARRAY 数据类型:

    https://h2database.com/html/datatypes.html#array_type

    H2 1.4.201 还将支持具有组件类型的符合标准的数组数据类型:

    componentDataType ARRAY[maximumCardinality]

    如果您现在确实需要该功能,您可以从其当前来源构建 H2,但我认为您并不真正需要它,非标准纯 ARRAY 也可以。

  2. '{"37.3","36.8","36.4"}' 是一个字符串文字。 H2 使用标准的数组字面量:

    ARRAY[element, …]

    https://h2database.com/html/grammar.html#array

    如果你使用一些过时的 H2 版本,你需要使用非标准的 (element, …) 文字代替(但不要在最近的版本中使用该变体,它将被它们解析为标准要求的行值)。

  3. 这与您的问题无关,但您确实应该使用 1 而不是 '1' 作为整数文字和 DATE '2019-09-11' 而不是 '2019-09-11' 作为日期文字以避免从字符串转换为其他数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2019-11-26
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2021-01-17
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多