一个连接oracle 中文乱码的问题

l0ong 2008-12-31 10:54:58
最近写的程序需要操作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 ,,不知道怎么弄了。
...全文
90 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
l0ong 2009-01-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wqmain 的回复:]
引用 10 楼 l0ong 的回复:
回楼上的,不行,
因为一开始就是这样的设置


如果这样设置还不行的话,根据你最开始的描述估计是的程序的问题吧
(你的filter和页面中的字符集是否一致?)
……
[/Quote]

问题是在别的机器都好使啊,而且在出问题的那台机器连其他机器的数据库读取的中文字符也是乱码
千骑卷平冈 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 l0ong 的回复:]
回楼上的,不行,
因为一开始就是这样的设置
[/Quote]

如果这样设置还不行的话,根据你最开始的描述估计是的程序的问题吧
(你的filter和页面中的字符集是否一致?)
……
l0ong 2009-01-07
  • 打赏
  • 举报
回复
,,,,,,,,,,
oraclelogan 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 l0ong 的回复:]
那么客户端的字符集应该怎么改呢?

客户端的注册表下 homo0 下的NLS_LANG 以设置为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 了

今天又试了下,在ORACLE中 SQL*PLUS worksheet 中运行
Select userenv (‘language’) from dual;

得到的是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

在我的c++程序中运行以上SQL命令,得到的确是 AMERICAN_AMERICA.ZHS16GBK
[/Quote]

c++,不熟悉,学习了!
l0ong 2009-01-06
  • 打赏
  • 举报
回复
回楼上的,不行,
因为一开始就是这样的设置
千骑卷平冈 2009-01-06
  • 打赏
  • 举报
回复
我机器上Oracle客户端显示的是:SIMPLIFIED CHINESE_CHINA.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


你改一下,看看行不?
l0ong 2009-01-05
  • 打赏
  • 举报
回复
那么客户端的字符集应该怎么改呢?

客户端的注册表下 homo0 下的NLS_LANG 以设置为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 了

今天又试了下,在ORACLE中 SQL*PLUS worksheet 中运行
Select userenv (‘language’) from dual;

得到的是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

在我的c++程序中运行以上SQL命令,得到的确是 AMERICAN_AMERICA.ZHS16GBK
oraclelogan 2009-01-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dawugui 的回复:]
引用楼主 l0ong 的帖子:
最近写的程序需要操作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…
[/Quote]

乌龟说的不错,改显示不正常的那台客户机器的字符集为中文吧!
l0ong 2009-01-02
  • 打赏
  • 举报
回复
SQL Plus WorkSheet中执行select userenv ('language') from dual ,获得的是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
说明服务器的字符集是 ZHS16GBK 吧,

我把注册表中 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE,ID0和 homo0下的 NLS_LANG都改为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 了,
在程序中 Insert 和select的结果还是不正常,SQL Plus WorkSheet中 执行Insert和Select的结果一切正常
dawugui 2009-01-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 l0ong 的帖子:]
最近写的程序需要操作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 ,,不知道怎么弄了。 [/Quote]

两个机器的字符集不同?
不是在程序在改,而是改那个机器的配置,按照你本机的字符集去改那个不能正常显示的机器的字符集.
BlueskyWide 2009-01-01
  • 打赏
  • 举报
回复
服务器中的字符集是不需要改的。
所有连接的客户端的字符集(hom0)要设置为服务器中的字符集。
jdsnhan 2009-01-01
  • 打赏
  • 举报
回复
显示不正常的机器上字符集是?
l0ong 2008-12-31
  • 打赏
  • 举报
回复
求救啊,,,,,

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧