Oracle字符集测试

理解Oracle字符集,有三个字符集要搞清楚。Oracle服务器字符集、客户端字符集、客户端系统字符集。通常客户端字符集和客户端系统字符集要一致。
服务器字符集确定字符是以那种编码存储在数据库服务器中的。
客户端字符集用于 确定在客户端与服务器之间是否需要进行字符转换。
客户端系统字符集用于在客户端对字符进行编码和显示服务器传递的字符。

select * from nls_database_parameters;
PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               ZHS16GBK
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
可以看到服务器的字符集是 ZHS16GBK

create table t (id number,name varchar(20));
  • 客户端系统字符集、客户端字符集、服务器字符集三者相同
客户端1:
设置系统字符集LANG="zh_CN. gbk"
设置客户端字符集NLS_LANG=AMERICAN_AMERICA. ZHS16GBK
客户端2:
设置系统字符集LANG="zh_CN. gbk"
设置客户端字符集NLS_LANG=AMERICAN_AMERICA. ZHS16GBK

客户端1:
insert into t(1,'上海');
commit;
客户端2:
insert into t(2,'中国');
commit;

客户端1:
select * from t;
        ID NAME
---------- --------------------
         1 上海
         2 中国
客户端2:
        ID NAME
---------- --------------------
         1 上海
         2 中国
  • 客户端字符集与服务器字符集相同,但与客户端系统字符集不同
删除表t中的数据:
delete from t;
commit;

客户端1:
设置系统字符集LANG="zh_CN. utf8"

客户端1:
insert into t values(1,'上海');
commit;

客户端1:
select * from t;
        ID NAME
---------- --------------------
         1 上海

客户端2:
select * from t;
        ID NAME
---------- --------------------
         1 涓婃捣
出现乱码!!!!
如果客户端字符集和服务器字符集相同,则不进行字符编码转换。如果客户端操作系统字符集是utf8,客户端字符集是zhs16gbk,服务器字符集是zhs16gbk,服务器会认为传递过来的是zhs16gbk编码,并按源编码存储。客户端查询数据时,服务器与客户端之间也不会进行编码转换,客户端系统会按utf8字符集解释编码。这样阴差阳错的客户端显示正确的字符集,因为字符没有转换。但是当客户端2查询时,由于客户端字符集和服务器字符集相同,不会进行字符转换,客户端2用zhs16gbk字符集解析utf8的编码,这样就会产生乱码。

**********************************华丽的分割线****************************************************

客户端2:
insert into t values(2,'中国');
commit;

客户端1:
select * from t;
        ID NAME
---------- --------------------
         2 �й
         1 上海

客户端2:
select * from t;
        ID NAME
---------- --------------------
         2 中国
         1 涓婃捣

出现乱码!!!!!!!!!这是因为字符‘中国’是按zhs16gbk编码存储,没有经过转换就按utf8解析显示,所以出现乱码!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25791987/viewspace-721601/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25791987/viewspace-721601/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值