如何解决插入Oracle数据中文为乱码问题?
我用ADOQuery连接Oracle数据库显示中文的时候是正常的(因为我已经改了注册表里的字符集),但插入中文的时候在数据库里就显示成乱码了,是不是需要把中文转换一下,这个问题该如何解决,望高手指点。谢谢。
[解决办法]
问题就出在你的客户端注册表中修改的字符集和oracle数据库中的字符集不匹配,修改一致后就好了
[解决办法]
你先修改为:SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280
你试试
[解决办法]
字符集問題。。。
需要改到系统的默认字符编码就行了.
写一个函数:
/**////<summary>
///将西欧字符编码转换成GB2312
///</summary>
///<paramname="s"></param>
///<returns></returns>
publicstaticstringConvert8859P1ToGB2312(strings)
{
returnSystem.Text.Encoding.Default.GetString(System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(s));
}
出现中文乱码的主要原因是字符集不同。
在Oracle中,我们关心三个地方的字符集:
l Oracle服务器内部的字符集
l NLS_LANG变量里保存的字符集
l 客户端应用的字符集
Oracle服务器内部的字符集
这是Oracle数据库存储数据使用的字符集。
在Oracle中可能使用
Select userenv('language') from dual;
或者:
Select name, value$ from props$;
查看。
NLS_LANG变量里保存的字符集
这个是Oracle设置的一个变量。
在Windows中,这个变量保存在注册表中:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0保存着NLS_LANG变量。
在Unix/Linux中,则需要自己进行设置了。我本人是在.profile里面加上
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG
客户端应用的字符集
使用Oracle里数据或者向Oracle提供数据的应用程序。
如果 Oracle服务器内部的字符集 和 NLS_LANG变量里保存的字符集 相同,在进行Oracle查询时,就会将Oracle中的数据直接查出来,返回给查询用户。进行Oracle的插入操作,就会直接将插入的数据保存进数据库中。
但是如果不同的话,Oracle查询时,会根据这两个字符集的一个映射,将数据库中的数据作一个转换,再返回给查询用户。进行插入操作时,也会根据映射,将插入的数据作一个转换,再插入数据库。这也是产生乱码的原因,这一层转换,把数据都给转乱了。
解决办法:
客户端字符集设置的和数据库端的字符集一样
[Q]怎么样查看数据库字符集
[A]数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
[解决办法]
你试下以下两种方法:
一、注册表中,把NLS_LANG的值改为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
二、我的电脑-属性-高级-环境变量,在“系统变量”(注意不是用户变量)下新建变量名:NLS_LANG,变量量为SIMPLIFIED CHINESE_CHINA.ZHS16GBK