我从 H2 中收到一个非常奇怪的错误,它告诉我它不知道某种数据类型,但没有告诉我它是哪一种。
这是错误消息:
Unknown data type: ; SQL statement:
CREATE TABLE bans (id INT NOT NULL AUTO_INCREMENT, player_id INT NOT NULL, operator_id INT NOT NULL, end DATETIME NULL, reason VARCHAR(1024) NOT NULL, PRIMARY KEY (id), INDEX (player_id), INDEX (end), FOREIGN KEY (player_id) REFERENCES players(id), FOREIGN KEY (operator_id) REFERENCES players(id)) [50004-200]
这是简单的 SQL 查询:
CREATE TABLE bans (id INT NOT NULL AUTO_INCREMENT, player_id INT NOT NULL, operator_id INT NOT NULL, end DATETIME NULL, reason VARCHAR(1024) NOT NULL, PRIMARY KEY (id), INDEX (player_id), INDEX (end), FOREIGN KEY (player_id) REFERENCES players(id), FOREIGN KEY (operator_id) REFERENCES players(id))
我既不明白 H2 想要告诉我什么,也不明白该查询有什么问题。我尝试调整间距,但没有成功。
编辑1:
我正在使用此 JDBC 字符串打开数据库连接:
jdbc:h2:%s;AUTO_SERVER=%s;DATABASE_TO_UPPER=FALSE
(并使用String.format
设置两个适当的值。第一个自然是基本文件名,第二个是TRUE
或FALSE
(任一工作)。)
我不会更改任何其他设置或启用任何其他模式。我唯一做的就是之前创建 2 个表并向其中插入一些数据。
最佳答案
如果没有 MySQL 兼容模式,则无法在 H2 中使用非标准 INDEX(player_id)
和 INDEX(end)
。 (实际上,标准不涵盖数据库索引。)
使用 MySQL 兼容模式,或使用单独的 CREATE INDEX
命令,例如
CREATE INDEX ON bans(end);
不需要在player_id
列上建立索引,因为H2将自动为约束FOREIGN KEY (player_id) REFERENCESplayer(id)
创建非唯一索引。
另请注意,DATABASE_TO_UPPER=FALSE
的行为自 198 年 4 月 1 日起已发生更改。通过此设置,所有列名称都区分大小写。您可能需要改用DATABASE_TO_LOWER=TRUE
。
关于java - H2 数据库 - "Unknown data type",数据类型为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186992/