• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

搞懂Oracle字符集的几个要点

mysql 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

经常会遇到一些ldquo;为什么我的查询显示乱码?rdquo;或者ldquo;为什么我导入后中文变成乱码?rdquo;的问题,如果想彻底搞懂

经常会遇到一些“为什么我的查询显示乱码?”或者“为什么我导入后中文变成乱码?”的问题,如果想彻底搞懂原因,需要研究下Oracle的字符集以及他们之间的转换的关系,还有OS字符集、NLS_LANG跟数据库字符集的关系。简单的总结下要搞懂的几个要点:
1. NLS_LANG数据库:保证字符相同,存储的2进制可变。
OSNLS_LANG:存储的2进制不变,字符可能显示不同。
2. 如果NLS_LANG设置成跟数据库字符集一样,则通过ORACLE NET传递数据时存储的2进制不会发生转换。如果不一样,则会发生转换。
3. NLS_LANG并不是我们以为的用来显示给我们的字符的编码,真正用来显示的编码是OS编码,所以如果NLS_LANG跟OS编码不一样时,同一个2进制串可能就会由本来的‘你’显示成‘靠’。
4. 向数据库传递字符时应尽量将NLS_LANG设置成OS字符集,以保证输入的‘我’到NLS_LANG一层不会发生字符变化,,从而保证到数据库端存储的就是‘我’;
不过使用EXP等客户端工具导出时,应尽量将NLS_LANG设置成数据库字符集,以保证导出时数据原封不动,不会发生数据丢失的可能。导入时也应尽量将NLS_LANG设成导出文件的字符集,以保证将转换移至传输到数据库的一步。(EXP,IMP也可能会发生数据丢失问题,具体要看源数据库,EXP客户端NLS_LANG,IMP客户端NLS_LANG,目标数据库的字符集)

5.其实乱码,说到底就是用于显示字符的操作系统没有在字符编码中找到对应的字符导致的,也并不是只要将NLS_LANG设置成数据库字符集就可以避免乱码的。

贴两张EYGLE的转换图

本文来源gao!daima.com搞$代!码网


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:搞懂Oracle字符集的几个要点
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址