有没有办法在配置为“US7ASCII”的Oracle数据库中存储Unicode文本

时间:2010-04-21 07:57:39

标签: oracle encoding utf-8 ascii

我们最近遇到了将商标符号从一个Oracle数据库复制到另一个Oracle数据库的问题,但是它已经被称为'?'。

我们已经将问题跟踪到配置了字符集'US7ASCII'的目标数据库。不幸的是,重建数据库来解决这个问题不是我们目前可以做的事情。

我们是否可以定义特定列以使用除服务器上配置的字符集之外的字符集?

2 个答案:

答案 0 :(得分:5)

您可以使用NVARCHAR2列而不是VARCHAR2列。查看视图NLS_DATABASE_PARAMETERS以确定NVARCHAR2字符集(它将始终支持unicode)。

答案 1 :(得分:0)

您可以使用UTF-7 encoding以7位编码存储任意Unicode字符串。 Unicode文本的UTF-7编码恰好是完全合法的ASCII文本。

当然,无论您想要使用哪个值,都需要特别注意,因为它们不能按原样读取(并且UTF-7的使用很少,以至于您可能无处可支持它。)

或者,您可以使用更常见的编码,例如BASE64,但这样做的缺点是即使是几乎ASCII文本在该编码中也是完全不可读的。这意味着,当某些部分正确处理编码时,您至少不能获得某些人类可读的内容。