当现有名称是保留字时,如何更改 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");
我正在尝试将我们的数据库从 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");