none
请教下访问oracle数据库中文存在乱码的问题 RRS feed

  • 问题

  • 大家好

    我在操作oracle数据库时,碰到了一些疑问,跟大家讨论一下。

    应用环境:

    我需要在一台电脑上,同时从别人的两个不同的oracle数据库里读取数据。

    oracle1是usascii7,oracle2的字符集我不知道(oracle2的字符集是AMERICAN _ AMERICA. ZHS16GBK)

    本地的nis_lang注册表值是中文的

    现在的问题是,我访问oracle1时,用微软提供的oledb访问,是不会有乱码的,可以正常显示中文。使用orale提供的odp.net组件访问的话,中文会显示成乱码。

    我访问oracle2时,用微软提供的oledb方式访问,中文却是乱码,使用odp.ne组件访问(oracle.dataaccess.dll)就会显示正常中文。

    请问这种情况下我该怎么办?



    2014年5月2日 19:29

全部回复

  • 你好楼主,

    关于oracle数据库中文乱码的原因与解决, 楼主可以看下这篇博客: http://blog.csdn.net/nfenghklibra/article/details/3132672

    它详细讲述了产生乱码的原因和解决方案。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年5月5日 3:24
  • 你好楼主,

    关于oracle数据库中文乱码的原因与解决, 楼主可以看下这篇博客: http://blog.csdn.net/nfenghklibra/article/details/3132672

    它详细讲述了产生乱码的原因和解决方案。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    我知道跟字符集有关,但是这篇文章,也没能解开我的疑惑。为什么各用一个连接驱动,就能没乱码,反之就是乱码
    2014年5月7日 13:05
  • 我知道跟字符集有关,但是这篇文章,也没能解开我的疑惑。为什么各用一个连接驱动,就能没乱码,反之就是乱码

    oledb是机种依存、即按NSI_LANG的值读取.
    odp.net是按即按NLS_CHARACTERSET的值读取.

    数据库存储的数据编码已经是固定的,读取后显示为什么样的编码是关键。
    Unicode编码就是用来解决这一问题的。
    除了人为转换,或者设置编码集外,应该没有其他办法。

    2014年5月8日 7:06
  • 我知道跟字符集有关,但是这篇文章,也没能解开我的疑惑。为什么各用一个连接驱动,就能没乱码,反之就是乱码

    oledb是机种依存、即按NSI_LANG的值读取.
    odp.net是按即按NLS_CHARACTERSET的值读取.

    数据库存储的数据编码已经是固定的,读取后显示为什么样的编码是关键。
    Unicode编码就是用来解决这一问题的。
    除了人为转换,或者设置编码集外,应该没有其他办法。

    我可以这样理解吗?

    oracle存进数据库时,是按照某个编码,把字符串转成二进制存进去的(一维数组)

    读取的时候,读出来二进制数据,再按某个编码,解码成字符串,显示出来?

    不过我有尝试过把varchar类型的字段,读成byte[],失败了。

    请问有没有什么办法,可以在程序内动态的修改数据库驱动比如(oledb)的解码字符集?


    2014年5月8日 8:26
  • 我知道跟字符集有关,但是这篇文章,也没能解开我的疑惑。为什么各用一个连接驱动,就能没乱码,反之就是乱码

    oledb是机种依存、即按NSI_LANG的值读取.
    odp.net是按即按NLS_CHARACTERSET的值读取.

    数据库存储的数据编码已经是固定的,读取后显示为什么样的编码是关键。
    Unicode编码就是用来解决这一问题的。
    除了人为转换,或者设置编码集外,应该没有其他办法。

    不太明白NSL_LANG和NSL_CHARACTERSET的区别。

    本地上不是注册表里只有一个NSL_LANG键吗,那里面不是定义了字符集了。如何另行使用NSL_CHARACTERSET

    2014年5月8日 9:29