oracle客户端字符集设置有趣的测试
本文档由ice.xie整理,转载请说明出处
今天在网上,郑全(oldboy)提出一个问题:在不修改注册表的情况下,如何修改客户端字符集?
事由:一个客户端可能会连到多个数据库,因此有可能遇到多种字符集,比如说简体中文,繁体中文!
众所周知,大家一般使用的改字符集的方法一般都是去注册表修改,类似于这样的键值:
HKEY_LOCAL_MACHINESOFTWAREOracleHOME0下,
如一般的简体中文
nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
思考:如何在windows下不修改注册表,而改变客户端的字符集设置呢?
修改环境变量,那windows不同进程是否类似于unix/linux有不同的环境变量呢?
在孙征宇(wzsh)的提议下,由我进行测试,测试过程如下
1.环境具体情况:
数据库版本:9.2.0.6
服务器端字符集:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
客户端字符集(注册表设置):AMERICAN_AMERICA.US7ASCII
2.设置环境变量
打开一个cmd窗口,以下称为window1
在windows1,输入set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
并测试一下,echo %nls_lang%,检查结果为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
打开另一个cmd窗口,以下称为window2
在windows1,输入set nls_lang=AMERICAN_AMERICA.US7ASCII
并测试一下,echo %nls_lang%,检查结果为AMERICAN_AMERICA.US7ASCII
这时再返回window1,测试echo %nls_lang%,检查结果为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
看到结果,心中有一点窃喜,看来windows在不同的进程中也会有不同的环境变量
3.在sqlplus中测试,两个windows连入同一资料库
在window1
用sqlplus连入测试库,发现抓取含有中文字符的table,结果为正常显示
在window2
用sqlplus连入测试库,发现抓取含有中文字符的table,结果为乱码
4.结果
windows在不同的进程中也会有不同的环境变量,可以通过修改环境变量的方式来修改客户端字符集[@more@]