5

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

现在,通过PL/SQL查询数据和中文抓取;像这样(字段名称): 在此处输入图像描述

在 pl/sql 中执行命令:“select userenv('language') from dual;” 并显示

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

于是我查看了Windows xp注册表:HKEY_LOCAL_MACHINE->SOFTWARE->Oracle->NLS_LANG。它显示:

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

我把它改成

简体中文_CHINA.AL32UTF8

但是中文还是乱码。

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

我执行命令:

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

并显示:在此处输入图像描述

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

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

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

4

1 回答 1

1

你需要小心。
SQLplus 和 OracleSqlDeveloper 实际上可能无法正确显示中文字符。
您需要为中文字符串取一个 nvarchar (utf8) 字段。

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

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

INSERT INTO YOUR_TABLE (newname)
VALUES (:UnicodeString)

command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
于 2013-11-22T14:56:57.443 回答