Oracle入门精读29-Oracle客户端字符集与NLS_LANG环境变量

NLS_LANG环境变量说明

格式如下

NLS_LANG = LANGEAGE_TERRITORY.CHARSET

1)LANGUAGE:客户端系统所使用的语言。

   操作系统使用简体中文,则为SIMPLIFIED CHINESE;若操作系统使用英文,则为AMERICAN。

   主要涉及到字符数据的排列顺序及年月日名称表示。

2)TERRIYTOR:客户端系统所在的地区

   默认的日期,货币以及数字格式,每个地区都有唯一名称。如CHINA,AMERICA或CANADA。

3)CHARSET:客户端应用程序所使用的字符集。

   NLS_LANG环境变量,能让字符数据在客户端字符集和数据库字符集之间正确地转换。在客户端使用sqlplus,常会遇到访问远程oracle数据库时中文显示乱码

客户端字符集

查询客户端字符集

Cmd > chcp

    

新建环境变量, NLS_LANG =SIMPLIFIED CHINESE_CHINA.ZHS16GBK

重启电脑,再用sqlplus登录

服务器端字符集

win+R –cmd  执行sqlplus 用户名/密码@服务名

cmd>sqlplus sys/K17000205@GSDOORDB as sysdba

Sqlplus>select userenv('language') from dual;

   查看数据库的字符集

SQLplus> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';

dump函数获得字符在数据库的编码

根据AL32UTF8的编码,“中国”两字的正确编码为(都为3个字节):中--e4,b8,ad  国--e5,9b,bd

SQL> select id,dump(strvar,1016) from test;

小实验

1)设置客户端的NLS_LANG参数   

 ##设置NLS_LANG和数据库字符集相同

cmd>set nls_lang=Simplified Chinese_China.AL32UTF8       

2)sqlplus 重新登录

    cmd>>sqlplus sys/K17000205@GSDOORDB as sysdba

3)sql>insert into test values(6,’中国’);

4) sql>select id,dump(strvar,1016) from test;

 

insert过程:

”中国“两字在客户端操作系统字符集ZHS16GBK中的编码是”d6,d0,b9,fa",由于在设置会话中的NLS_LANG和数据库字符集相同,数据库端对客户端传过来的字符编码不进行任何转换直接存入数据库,因此数据库中存储的编码也是“d6,d0,b9,fa”.

select过程:

1)数据库端读取的编码是“d6,d0,b9,fa”,由于在设置会话中的NLS_LANG和数据库字符集相同,则客户端对数据库端传过来的字符编码不进行任何转换直接显示,编码”d6,d0,b9,fa“在客户端操作系统字符集ZHS16GBK对应的汉字为“中国”。

2)数据库端读取的编码是”e4,b8,ad,e5,9b,bd“,由于NLS_LANG和数据库字符集相同,客户端对数据库端传过来的字符编码不进行任何转换直接显示,编码”e4,b8,ad,e5,9b,bd“在客户端操作系统字符集ZHS16GBK对应的汉字为“涓   浗”(原本2个字符,现在变成了3个字符,因为ZHS16GBK的汉字以2个字节编码)。

小结;

如果客户端操作系统的字符集和数据库字符集间无法正确转换,则应该首先改变客户端终端的字符集,而不是简单地把NLS_LANG设为和数据库字符集一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值