我用ADOQuery连接Oracle数据库显示中文的时候是正常的(因为我已经改了注册表里的字符集),但插入中文的时候在数据库里就显示成乱码了,是不是需要把中文转换一下,这个问题该如何解决,望高手指点。谢谢。
解决方案 »
- 一个简单的数据查询问题
- quickreport的主从报表如何sum
- 关于删除mdb文件,DeleteFile不能删除,帮我看看为什么啊,解决就送分
- 我对文本文件操作时,程序运行只能写入文本中最后的数据,要写入全部怎样该?????(谢谢!送分!!!!)
- 存储过程返回结果集不能修改保存????
- 如何编程实现多表查询
- 很好拿的分,谁第一个回答对就给谁
- 可以象控制Word那样控制Flash么?
- 打印设置???有没有真正的“高手”指点!
- 开发ERP的程序员再次请问?++(昨天回答问题的高手再给你门分)!
- cxgrid 主从表问题.
- ClientDataSet内存表反复的插入和删除记录后(最后总记录数基本不变),会不会内存越占越多
如何修改呢,我现在的字符集是这样改的
注册表ORACLE [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]"NLS_LANG"="AMERICAN_AMERICA.WE8ISO8859P1"
你试试
不行呀,麻烦再帮想想!谢谢
写一个函数:/**////<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.ZHS16GBKexport 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
我试过了,还是不行,看看能不能在delphi里进行转换呢?