Sqlplus连接Oracle出现中文乱码问题以及字符集的选择

        昨天在虚拟机里新装了个Ubuntu,然后今天使用sql/plus时就出现了中文乱码问题,百度一番,终于解决了吐舌头

乱码现象如图:


搞定后如图:


常用的字符集:

US7ASCII:只能存储美国人使用的字符,26个英文字母,数字,+-*/等等

ZHS16GBK:存储中国人常用的字符

UTF8:unicode字符集,存储全世界的字符,只是不全

AL32UTF8:unicode字符集,比UTF8大多了,unicode字符集使用它,全但性能较差

ALS16UTF16:国家字符集选择它

注意:如果只是中国人使用,ZHS16GBK就足够了,如果是全世界都使用,就使用AL32UTF8

字符集一共有三种:a.操作系统字符集

                                   b.Oracle数据库字符集

                                    c.软件字符集

      如果软件有字符集,就不会使用操作系统的字符集;如果没有字符集(比如SQL/PLUS就没有字符集),那么在输入和显示中文时就调用操作系统的字符集来进行编码。SQL/PLUS在输入中文以后,会调用操作系统的字符集将中文转化成编码,然后传递给Oracle数据库,Oracle数据库通过查看nls_language来获取操作系统使用的字符集,如果俩字符集是一致的,那么就会直接将编码存入Oracle数据库;如果不一致,Oracle数据库首先会用nls_lang所表明的字符集将编码转化成字符,然后用Oracle数据库自己的字符集将字符转化成编码存入数据库。总之,所有字符集的转化都是在Oracle端进行的,Oracle数据库在存储数据的时候一定是按照自己的字符集来存储的。

1. NLS_LANG 参数组成
NLS_LANG参数由以下部分组成:
NLS_LANG=<Language>_<Territory>.<Clients Characterset>

NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页 
或者对于unicode应用设置为UTF8

2查看 NLS_LANG 的方法

Windows使用:

echo %NLS_LANG%

Unix使用:

env|grep NLS_LANG

3. 查看数据库当前字符集参数设置
SELECT * FROM v$nls_parameters;

4. 查看数据库可用字符集参数设置
SELECT * FROM v$nls_valid_values;

5. 客户端 NLS_LANG 的设置方法
Windows:
常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
常用unicode字符集
set NLS_LANG=american_america.AL32UTF8

Unix:
常用unicode字符集

export NLS_LANG=american_america.AL32UTF8

常用中文字符集

export NLS_LANG="Simplified Chinese_china".ZHS16GBK

可以编辑 bash_profile 文件进行永久设置

vi .bash_profile

NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG

使 bash_profile 设置生效

source .bash_profile

 6.出现乱码可能存在的原因:

存储错误的字符编码

存储正确的字符编码,但nls_lang设置错了

 7.解决方法:

       操作系统常用的字符集一共两种,一种是UTF8,还有一种就是中文。windows通过chcp命令来查询操作系统所使用的字符集,如果现实"活动代码页:936",就表示操作系统使用的字符集是中文,这时只要将nls_lang通过Set nls_lang=american_america.zhs16gbk命令设置成GBK即可,总之,NLS_LANG一定要设置成与操作系统字符集一致才不会出现中文乱码或者显示?的问题。


参考资料:

Oracle:sqlplus查询出的中文是乱码问题的解决

sqlplus连接oracle乱码

                               欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;

                                                                          

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页