最近写的程序需要操作oracle ,用sqlapi++来连接数据库的,但现在发现,在一台机器上试行的时候用程序插入和读取中文字符 就是乱码,,当然在我的机器上用的时候是显示正确的,
在SQL Plus WorkSheet中执行select userenv ('language') from dual ,获得的是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 然后查看了机器注册表中 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG 值为 NULL ,homo0下NLS_LANG为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
IDO 下NLS_LANG 也为NULL ,SQL Plus WorkSheet 中用 Insert 和Select 得到的中文都是显示正常的,但用我的程序 Insert 和Select 的结果就不正常了,程序连接前已将 charset
设置为ZHS16GBK ,,不知道怎么弄了。
在SQL Plus WorkSheet中执行select userenv ('language') from dual ,获得的是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 然后查看了机器注册表中 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG 值为 NULL ,homo0下NLS_LANG为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
IDO 下NLS_LANG 也为NULL ,SQL Plus WorkSheet 中用 Insert 和Select 得到的中文都是显示正常的,但用我的程序 Insert 和Select 的结果就不正常了,程序连接前已将 charset
设置为ZHS16GBK ,,不知道怎么弄了。
所有连接的客户端的字符集(hom0)要设置为服务器中的字符集。
说明服务器的字符集是 ZHS16GBK 吧,我把注册表中 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE,ID0和 homo0下的 NLS_LANG都改为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 了,
在程序中 Insert 和select的结果还是不正常,SQL Plus WorkSheet中 执行Insert和Select的结果一切正常
Select userenv (‘language’) from dual;得到的是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK在我的c++程序中运行以上SQL命令,得到的确是 AMERICAN_AMERICA.ZHS16GBK
注册表中:
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG 值为NA
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ID0/NLS_LANG 值为NA
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0/NLS_LANG 值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
你改一下,看看行不?
如果这样设置还不行的话,根据你最开始的描述估计是的程序的问题吧
(你的filter和页面中的字符集是否一致?)
……