oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

时间:2021-11-29 21:02:37

提要:本文重点剖析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系统当前字符集

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

936表示操作系统当前字符集为简体中文,同ZHS16GBK.

1.2 ORACLE注册表

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

该键值默认读取OS系统当前字符集,当然可以修改。

1.3 系统环境变量NLS_LANG

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

环境变量影响Dos、sql*plus、PL/SQL DEVELOPER等内容

1.4 ORACLE数据库字符设置

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

该值是在创建数据库时指定的

1.5  PL/SQL DEVELOPER菜单中TOOLS中首选项的'unicode support'

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

该选项的说明是:

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格式

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

该图说明写入中文时一定要指定环境变量NLS_LANG,只要指定了,输入中文便能正确写入,无其他要求。 

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

该图。。。没总结出规律 

oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

该图。。。同没总结出规律

综上要说明的是 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

经过测试,和专家们描述一样,操作系统的字符占有很大角色,错误易发现和理解。

还在进一步测试之中,希望有研究透的朋友留言说明pl/sql developer的规律。