有一段时间没敲过SQL了,今天复习,想打开SQLplus敲敲,结果不知道为什么就乱码了,很是无语,于是上网查找了下解决办法,可是都没用。
网上提供最主要也是最有用的方法就是设置环境变量NLS_Lang。
解决Oracle的客户端乱码问题的关键关键是要把服务器端使用的字符集跟客户端使用的字符集统一起来。而Oracle客户端(Sqlplus)就是通过NLS_LANG环境变量来确定客户端使用的字符集。
NLS_LANG参数由以下部分组成:
NLS_LANG=<Language>_<Territory>.<Clients Characterset>
NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页,或者对于unicode应用设置为UTF8
而要设置NLS_Lang首先就要知道你的服务器端的字符集是什么,这个可以在SQLplus中以下代码查看:
select userenv('language') from dual;
知道后再设置电脑的环境变量NLS_LANG,将其设置成与之相同的字符集一般就解决了,但是,总是有那么几台电脑爱抽风,比如说我的。。。
我的电脑是win10的系统,虽然知道win10系统问题多,但就是不想换怎么办,那就要面对一些其他系统不会遇到的麻烦,比如说我的服务器端显示的字符集是:`SIMPLIFIED CHINESE_CHINA.AL32UTF8`,可是将NLS_LANG设置之后却没有一点用,依旧乱码乱得很开心,之后我又按网上说的想去改注册表,结果发现Win10注册表里完全没那个选项。。。折腾了一上午,最后将尝试将之改为了`SIMPLIFIED CHINESE_CHINA.ZHS16GBK`后又恢复正常了。。。
所以,希望其他依然坚持的用着Win10,然后遇到这个问题的朋友,看到不妨也试试这个,也许乱码的问题就解决了。
这仅仅只是我的个人经验,经供参考。
虽然问题是解决了,但却是知其然而不知其所以然,如果路过的大神有知道的,希望可以指点下。
如果有错误或是可以改进的地方,希望各位大神能指点一二。