Oracle将列类型从CLOB更改为NCLOB

jbose2ul  于 2022-10-04  发布在  Oracle
关注(0)|答案(2)|浏览(352)

我们使用的是Oracle,并且我们要求允许将希腊字符存储在数据库中。目前,我们的DB示例不允许插入‘ϕ’之类的希腊字符。在谷歌上搜索后,我发现这与字符集有关。我的Oracle使用不支持希腊字符的NLS_CHARACTERSET-WE8MSWIN1252。如果必须工作,我将不得不将字符集更改为AL32UTF8、UTF8、AL16UTF16或WE8ISO8859P7之一。现在我们在数据库中已经有了这么多数据,现在更改字符集将是一个风险。

我的另一个选择是将列类型(用于插入希腊语)从CLOB或VARCHAR2更改为NVARCHAR2,它工作得很好。

在更改列类型之前,我想知道将列类型从CLOB更改为NVARCHAR2所涉及的风险,以及在更改之前需要记住的事项。

此外,我还想知道将现有字符集更改为AL32UTF8的利弊。

编辑:

还有一个选项是将CLOB更改为NCLOB,这似乎风险较小,因为两者都是密切相关的*(几乎相同)*类型。请务必让我知道将CLOB改为NCLOB的利弊。

nlejzf6q

nlejzf6q1#

好的。我在谷歌上搜索并在其他论坛上发布问题,在这里得到了一个非常需要的答案。

https://www.toolbox.com/tech/oracle/question/migrating-clob-to-nclob-010917/

62o28rlo

62o28rlo2#

所以我自己也遇到了这个问题,我对上面的解决方案有问题,因为它没有跨我的其他专栏的外键和约束复制。为了解决这个问题,我做了以下操作

1.为我的NCLOB数据创建了一个新列,

ALTER TABLE TABLE_NAME ADD NEW_TABLE_COLUMN NCLOB

1.然后,我使用to_NCLOB()函数将CLOB数据复制到新的NCLOB数据列中

UPDATE TABLE_NAME SET NEW_TABLE_COLUMN=TO_NCLOB(OLD_TABLE_COLUMN);

3)最后我删除了旧专栏,然后将我的新专栏重命名为我的旧专栏名

ALTER TABLE TABLE_NAME DROP列OLD_TABLE_COLUMN;

ALTER TABLE TABLE_NAME将列NEW_TABLE_COLUMN更改为OLD_TABLE_COLUMN;

如果您这样做,请确保备份数据,因为删除列将删除它并提交您已有的任何事务

我在Oracle中也这样做了,所以在其他版本的SQL中,语法可能会略有不同。

相关问题