当现有名称是保留字时,如何更改 HSQLDB 中的列名称?

How to change a column name in HSQLDB when the existing name is a reserved word?

我正在尝试将我们的数据库从 HSQLDB 1.7 升级到最新版本。不幸的是,有人将一列命名为 "Default"。我似乎无法在 SQL 中重命名此列(这在 1.7 中是因为必须在升级之前进行重命名)。

我试过转义列:

stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"DEFAULT\" RENAME TO new_name");

和各种变体(包括“\”和 [])但似乎没有任何效果,我总是得到以下结果

java.sql.SQLException: Column not found: DEFAULT in statement [ALTER TABLE table_name ALTER COLUMN "DEFAULT"]

我显然漏掉了什么?

尝试使用 反引号 (`)。
这应该很好地转义默认字符串。

ALTER TABLE `table_name` ALTER COLUMN `DEFAULT` RENAME TO `new_name`

来自HSQLDB guide

All keywords, can be used for database objects if they are double quoted.

所以尝试使用这个:

ALTER TABLE "table_name" ALTER COLUMN "DEFAULT" RENAME TO "new_name"

Unfortunately someone has named a column "Default"

问题似乎出在外壳上。双引号 "escape" 不仅是您的名字,它们还使它们区分大小写,这与大多数数据库中不区分大小写的非引号名称不同。所以在重命名列时必须使用准确的大小写:

ALTER TABLE table_name ALTER COLUMN "Default" RENAME TO new_name

... 或 JDBC:

stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"Default\" RENAME TO new_name");