QQ空间迁移_【(转whitepop博客)oracle_完整剖析PL_SQL_DEVELOPER与SQL_PLUS字符集设置】

本文详细解析了PL/SQLDeveloper与SQLPLUS中字符集设置的关键因素,包括操作系统字符集、ORACLE注册表、环境变量NLS_LANG和数据库字符集,特别强调了'unicodesupport'选项的作用和潜在问题。通过实验数据展示了正确与错误中文存储的影响,以及如何避免PL/SQLDeveloper中的显示误导。

(转whitepop博客)oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置

2014-08-14 10:26:48

提要:本文重点剖析PL/SQL DEVELOPER与SQL PLUS字符集设置问题,对两者的中文数据写入、读取之间整个流程做描述,抛砖引玉。

工作后要保持学习,同时学习内容还是要勤记下来,并期望对新人有所帮助,请看文。

非常感谢三位专家的文章,能扫清各种基本概念及大部分疑惑,建议大家多读读。他们是:

1、http://blog.youkuaiyun.com/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系统当前字符集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DuqKWrC5-1612597855271)(…/images/05E8D846.jpg)]

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

1.2 ORACLE注册表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wdoZNJEN-1612597855274)(…/images/CB13C7B5.jpg)]

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

1.3 系统环境变量NLS_LANG

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mDPZMGOp-1612597855280)(…/images/6ADCA9FB.jpg)]

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

1.4 ORACLE数据库字符设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BbSXcd2-1612597855285)(…/images/43654A15.jpg)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y83Aa6gl-1612597855291)(…/images/F0C2A739.jpg)]

该选项的说明是:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-64EWHvNe-1612597855292)(…/images/3C89210D.jpg)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VCeCgQmX-1612597855295)(…/images/0D286DFE.jpg)]

该图。。。没总结出规律

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wcAjnfwl-1612597855298)(…/images/273C37FB.jpg)]

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

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

评论(0)

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

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

评论(0)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值