搞懂Oracle字符集的几个要点

 我来答
懂视生活
2023-07-27 · 百度认证:湖南福仁科技有限公司官方账号
懂视生活
向TA提问
展开全部

经常会遇到一些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的转换图:




推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式