Oracle汉字乱码问题原因及解决方法

2017年12月22日16:18:19 发表评论 676 views
本文最后更新于2017年12月22日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

原因

出现中文乱码的主要原因是字符集不同。
在Oracle中,我们关心三个地方的字符集:

1、Oracle服务器内部的字符集
2、NLS_LANG变量里保存的字符集
3、客户端应用的字符集

1、Oracle服务器内部的字符集

这是Oracle数据库存储数据使用的字符集。
在Oracle中可能使用

2、NLS_LANG变量里保存的字符集

这个是Oracle设置的一个变量。
在Windows中,这个变量保存在注册表中:
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0保存着NLS_LANG变量。
在Unix/Linux中,则需要自己进行设置了。我本人是在.profile里面加上
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG

 

3、客户端应用的字符集

使用Oracle里数据或者向Oracle提供数据的应用程序。
如果 Oracle服务器内部的字符集 和 NLS_LANG变量里保存的字符集 相同,在进行Oracle查询时,就会将Oracle中的数据直接查出来,返回给查询用户。进行Oracle的插入操作,就会直接将插入的数据保存进数据库中。
但是如果不同的话,Oracle查询时,会根据这两个字符集的一个映射,将数据库中的数据作一个转换,再返回给查询用户。进行插入操作时,也会根据映射,将插入的数据作一个转换,再插入数据库。这也是产生乱码的原因,这一层转换,把数据都给转乱了。

 

解决办法

将数据库的字符集和NLS_LANG字符集设置的一样,就可以避免乱码的出现了。
修改数据库字符集的步骤如下:

注:
1. 如果数据库表中有CLOB类型的列,是不允许修改字符集的,解决方法为,先导出这个表的内容,然后删除这个表,修改完后,再导入这个表的内容就可以了。
2. 旧的字符集必须是新的字符集的子集,否则不能修改。

 

  • 微信小程序
  • 关注微信小程序
  • weinxin
  • 微信公众号
  • 关注微信公众号
  • weinxin
Honest1y

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: