我试图将我们的数据库从HSQLDB 1.7升级到最新版本。不幸的是,有人将列命名为#34;默认"。我似乎无法在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"]
我明显遗漏了什么?
答案 0 :(得分:2)
不幸的是,某人已经命名了一个列"默认"
问题似乎是外壳。双引号"避免"你的名字,它们也使它们区分大小写,不像非引用的名称,在大多数数据库中不区分大小写。因此,在重命名列时必须使用精确的外壳:
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");
答案 1 :(得分:1)
来自HSQLDB guide:
所有关键字都可以用于数据库对象,如果它们是双倍的话 引述。
所以试着用这个:
ALTER TABLE "table_name" ALTER COLUMN "DEFAULT" RENAME TO "new_name"
答案 2 :(得分:-1)
尝试使用反引号(`) 这应该很好地转义默认字符串。
ALTER TABLE `table_name` ALTER COLUMN `DEFAULT` RENAME TO `new_name`