PL / SQL中文在oracle中出现乱码

时间:2013-10-30 08:39:24

标签: sql oracle plsql oracle11g

我的oracle版本是11g,在linux上安装。客户端是xp。

现在,通过PL / SQL查询数据和中文问号;像这样(字段名称): enter image description here

在pl / sql执行命令中:“从双重选择userenv('language');”并显示

  

SIMPLIFIED CHINESE_CHINA.AL32UTF8(我认为它是服务器端字符集)

所以我看一下Windows xp注册表:HKEY_LOCAL_MACHINE-> SOFTWARE-> Oracle-> NLS_LANG。 它显示:

  

SIMPLIFIED CHINESE_CHINA.ZHS16GBK(我认为是客户端字符集)

我把它改成了

  

SIMPLIFIED CHINESE_CHINA.AL32UTF8

但是中国人仍然是乱码。

而且,这个“NAME”字段实际上应该显示:“北京市”。

我执行命令:

select dump(name,1016) from MN_C11_SM_S31 where objectid=1;

并显示:enter image description here

这是否意味着数据本身存储不正确? 我该怎么办?

补充:只是,我用C#代码用UTF-8解析这个字符串:“e58c97e4baace5b882”。

它显示:“北京市”。我认为这证明数据本身并没有错。

1 个答案:

答案 0 :(得分:1)

你需要小心。
SQLplus和OracleSqlDeveloper可能实际上错误地显示中文字符 你需要为中文字符串取一个nvarchar(utf8)字段。

尝试使用C#Windows应用程序输入,插入和显示数据,它在内部使用unicode,因此您至少可以排除该bug源。不要使用控制台应用程序进行显示,控制台应用程序无法正确显示Unicode字符。

然后,您需要将字符串存储在nvarchar字段(而不是varchar)中,并在插入字符串时使用nvarchar类型的参数。

INSERT INTO YOUR_TABLE (newname)
VALUES (:UnicodeString)

command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;