oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置
提要:本文重点剖析PL/SQL DEVELOPER与SQL PLUS字符集设置问题,对两者的中文数据写入、读取之间整个流程做描述,抛砖引玉。
工作后要保持学习,同时学习内容还是要勤记下来,并期望对新人有所帮助,请看文。
非常感谢三位专家的文章,能扫清各种基本概念及大部分疑惑,建议大家多读读。他们是:
1、http://blog.csdn.net/tianlesoftware/article/details/4915223 oracle 字符集的查看和修改
2、http://space.itpub.net/519536/viewspace-626952 论oracle字符转码过程
3、http://www.itpub.net/838447,1.html 搞懂oracle字符集
本人也是在他们基础上发现了问题并做了补充实验
一、如果您使用PL/SQL DEVELOPER(版本不限)
1、影响PL/SQL DEVELOPER字符集显示的要素
1.1 OS系统当前字符集
936表示操作系统当前字符集为简体中文,同ZHS16GBK.
1.2 ORACLE注册表
该键值默认读取OS系统当前字符集,当然可以修改。
1.3 系统环境变量NLS_LANG
环境变量影响Dos、sql*plus、PL/SQL DEVELOPER等内容
1.4 ORACLE数据库字符设置
该值是在创建数据库时指定的
1.5 PL/SQL DEVELOPER菜单中TOOLS中首选项的'unicode support'
该选项的说明是:
Unicode enabled.
When selected, Unicode data will be fetched as such from the Oracle Server, and displayed as Unicode text. When disabled, Unicode data from the server will be converted to the character set of the Oracle Client, in accordance with the NLS_LANG key of the Oracle Home Registry. -----------from pl/sql developer help content
2、实验数据如下三表,黏贴自excel格式
该图说明写入中文时一定要指定环境变量NLS_LANG,只要指定了,输入中文便能正确写入,无其他要求。
该图。。。没总结出规律
该图。。。同没总结出规律
综上要说明的是 unicaode support 影响的是读取数据的显示,造成很大的迷惑,很难发现数据库中存储的正确性。
1、如果数据库中中文存储正确(即按照数据库创建时的字符集存储),则在pl/sql developer上都是正确的,除非没有指定nls_lang并且没开support;
2、输入数据库中中文存储错误(即没有按照数据库创建时字符集正确存储),则在pl/sql developer上会出现迷惑结果,显示是正确的,但也有错误的时候。这一点是pl/sql developer的隐患。
怎么排除隐患
1、写入中文要设置好环境变量NLS_LANG并且和操作系统的字符集保持一致,这样才能正确转码存储。
2、为减少错误发生率可关闭unicode support
二、如果使用sql*plus、DOS
经过测试,和专家们描述一样,操作系统的字符占有很大角色,错误易发现和理解。
上一篇:XMANGER 安装ORACLE乱码解决并且显示中文的解决方法
下一篇:Oracle 11.2.0.4 RAC FOR redhat 6.4