因此,出于某些遗留原因,我们拥有一个NLS_CHARACTERSET = WE8MSWIN1252
的Oracle数据库。现在我们要将CJK字符存储到VARCHAR2
字段中。这是可能的,如果是这样,我该怎么做才能实现这个目标?
PS:由于产品已发布,更改NLS_CHARACTERSET
将无从谈起。
修改
到目前为止,我们已经提出了这样一个想法:
对于每个CJK字符,我们将其分解为UTF-8字节表示,然后将字节序列存储到数据库中。作为回报,我们将它们重组为CJK角色。例如,中文字符中
将为0xe4, 0xb8, 0xad
,因此我们将存储3个字节。
然而,这种方法似乎无法正常工作。如果我们在字节中存储华
0xe5, 0x8d, 0x8e
,则数据库中会变为0xe5, 0xbf, 0x8e
。
我们正在使用Java语言,不知道这是否与结果有关。
答案 0 :(得分:0)
不正确,没有。如果数据库的字符集是Windows-1252,则可以在VARCHAR2
列中正确存储的唯一字符是Windows-1252字符集中存在的字符。
如果NLS_NCHAR_CHARACTERSET
是Unicode(通常是AL16UTF16
),您可以创建NVARCHAR2
列并在该新列中存储CJK字符。您的应用程序可能需要更改代码才能支持NVARCHAR2
列。