我最近將 h2 版本從 1.4.200 升級到 2.0.206。一些以前在舊版本中作業的查詢在升級后無法正常作業。
CREATE TABLE SOMETABLE (
ID INT(11) NOT NULL AUTO_INCREMENT,
SOURCE_ID VARCHAR(255) NOT NULL,
MESSAGE VARCHAR(255) NOT NULL,
PRIMARY KEY (`ID`)
);
CREATE TABLE IF NOT EXISTS SOMEOTHERTABLE (
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255) NOT NULL,
CREATED_TIME TIMESTAMP NOT NULL,
LAST_MODIFIED TIMESTAMP NOT NULL,
HAS_FILE BOOLEAN(1) NOT NULL,
PRIMARY KEY (ID)
);
對于這兩個,我得到類似的錯誤
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement " CREATE TABLE SOMETABLE ( ID INT([*]11) NOT NULL AUTO_INCREMENT, SOURCE_ID VARCHAR(255) NOT NULL, MESSAGE VARCHAR(255) NOT NULL, PRIMARY KEY (`ID`) )"; expected "ARRAY, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, DEFAULT, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, COMMENT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, AUTO_INCREMENT, ., )";
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement " CREATE TABLE IF NOT EXISTS SOMEOTHERTABLE ( ID VARCHAR(255) NOT NULL, NAME VARCHAR(255) NOT NULL, CREATED_TIME TIMESTAMP NOT NULL, LAST_MODIFIED TIMESTAMP NOT NULL, HAS_FILE BOOLEAN([*]1) NOT NULL, PRIMARY KEY (ID) )"; expected "ARRAY, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, DEFAULT, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, COMMENT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, AUTO_INCREMENT, ., )";
似乎在這兩種情況下,擁有INT(11)并且BOOLEAN(1)是問題所在。這些在新版本中不再允許了嗎?如果是這樣,我應該如何改變這些?對此的任何幫助表示贊賞。
uj5u.com熱心網友回復:
你為什么有這樣的定義?H2 1.4.200 的檔案不允許這些資料型別的任何引數。
INT(11)僅在 MySQL 和 MariaDB 兼容模式下允許,但指定的精度被 H2 忽略。這個定義在 H2 2.0 的所有其他兼容模式下都被拒絕,你需要使用INTor INTEGER。
BOOLEAN(1)根本不允許,如果它在 1.4.200 中作業,那是決議器中的一個錯誤。你需要使用BOOLEAN.
AUTO_INCREMENT子句通常也應該只在 MySQL 和 MariaDB 兼容模式下使用,但它也可以在常規模式下使用。正確的子句是主鍵和標識列不需要GENERATED BY DEFAULT AS IDENTITY顯式約束,您可以將其洗掉。NOT NULL約束通常也應該在所有其他子句之后指定,NOT NULL在 H2 實際接受身份選項之前,但是這種錯誤的子句順序沒有記錄并且不受支持。
uj5u.com熱心網友回復:
將 h2 版本從 1.4.200 更新到 2.0.206 時,我遇到了同樣的問題。該專案基于 Spring Boot 并使用 Hibernate。
就我而言,問題是,我有一個物體,其欄位參考名為“VALUE”的表列。
@Column(name = "VALUE")
private BigDecimal value;
根據檔案https://h2database.com/html/advanced.html#keywords, VALUE 是保留關鍵字。將列參考“VALUE”更改為“VALUE1”之類的內容解決了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412274.html
標籤:
上一篇:SQL如何連接有或沒有2個表
下一篇:為什么ApacheIoTDB在javaNativeMemoryTracking中的Internalmemory太高?
