Character encoding 使用默认NLS\U字符集设置在Oracle中存储utf-8字符

Character encoding 使用默认NLS\U字符集设置在Oracle中存储utf-8字符,character-encoding,oracle11g,Character Encoding,Oracle11g,因此,出于某些遗留原因,我们有一个Oracle数据库,其NLS\u CHARACTERSET=WE8MSWIN1252。现在我们要将CJK字符存储到VARCHAR2字段中。这可能吗?如果可能,我必须做些什么来实现这一点 PS:由于产品已经发布,更改NLS\U字符集将是不可能的 编辑 到目前为止,我们提出了这样一个想法: 对于每个CJK字符,我们将其分解为UTF-8字节表示,然后将字节序列存储到数据库中。作为回报,我们将它们重新组织为CJK角色。例如,汉字中将是0xe4、0xb8、0xad,因此我

因此,出于某些遗留原因,我们有一个Oracle数据库,其
NLS\u CHARACTERSET=WE8MSWIN1252
。现在我们要将CJK字符存储到
VARCHAR2
字段中。这可能吗?如果可能,我必须做些什么来实现这一点

PS:由于产品已经发布,更改
NLS\U字符集
将是不可能的

编辑

到目前为止,我们提出了这样一个想法: 对于每个CJK字符,我们将其分解为UTF-8字节表示,然后将字节序列存储到数据库中。作为回报,我们将它们重新组织为CJK角色。例如,汉字
将是
0xe4、0xb8、0xad
,因此我们存储3个字节

然而,这种方法似乎并不正确。如果我们存储汉字
在字节中是
0xe5,0x8d,0x8e
,在数据库中变成
0xe5,0xbf,0x8e


我们使用的是Java语言,不知道这是否与结果有关。

不正确,不正确。如果数据库的字符集是Windows-1252,则可以正确存储在
VARCHAR2
列中的唯一字符是Windows-1252字符集中存在的字符


如果
NLS\u NCHAR\u字符集
是Unicode(通常
AL16UTF16
),您可以创建一个
NVARCHAR
列,并在该新列中存储CJK字符。您的应用程序可能需要更改代码才能支持
nvarhar2
列。

谢谢Justin的回答。我在问题中添加了我们当前的方法(虽然工作不正常),如果它(接近)正确的话,请您帮助回顾一下?