oracle字符集相关总结

本文详细介绍了Oracle数据库中字符集的概念,包括服务器端和客户端字符集的设置方式及其影响。解析了字符集参数NLS_LANG的作用,并探讨了乱码产生的原因及解决办法。

 

1、查询oracle服务器端的字符集:
SQL>select userenv('language') from dual

可以获得一个类似这样的结果:AMERICAN_AMERICA.AL32UTF8
其对应的含义分别为:language_territory.charset
language 指定服务器消息的语言,
territory指定服务器的日期和数字格式
charset  指定字符集

对应的参数是:NLS_LANG = language_territory.charset

那客户端这个字符集的设置是不是就代表了客户端的language ,territory,charset?

2、charset的含义:
<语言><比特位><编码>
如:AL32UTF8 表示AL:支持所有语言,32:32位表示,UTF8编码
 ZHS16GBK 采用GBK编码格式、16位(两个字节)简体中文字符集
按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。

3、oracle数据库字符集:
   安装时设置的
 字符集:用于存储CHAR, VARCHAR2,CLOB,LONG等类型
 国家字符集::用于存储NCHAR,NVARCHAR2,NCLOB等类型
4、乱码产生的原因
  汉字变成'????',一种是从字符集A转换到字符集B,如果转换字符间不存在对应关系,(字符集

B中没有A中对应的字符),则显示?。(如,GBK转换成Ascii码,GBK中的很多编码ASCII码中都没有)
 汉字变成未知字符:转换存在对应关系,但是字符集A中的字符编码与字符集B中的字符编码代表

的意义不同。(如编码本身是GBK的,但是表示的时候用UTF8表示,GBK码对应的UTF8码是未知字符)

  另外一种是字符集B中虽然有对应的字符,但是编码


5、发生乱码原因

服务器端字符集、客户端应用字符集和客户端NLS_LANG参数


乱码产生是由于几个字符集之间转换不匹配造成,分以下几种情况:(注:字符集之间如果不存在子集、

超集对应关系时的情况不予考虑,因为这种情况下字符集之间转换必产生乱码)

1)服务器端数据库字符集与客户端应用字符集相同,与客户端NLS_LANG参数设置不同如果客户端

NLS_LANG字符集是其它两种字符集的子集,转换过程将出现乱码。

解决方法:将三种字符集设置成同一字符集,或NLS_LANG字符集是其它两种字符集的超集

2 )服务器端数据库字符集与客户端NLS_LANG参数设置相同,与客户端应用字符集不同如果客户端应用字

符集是其它两种字符集的超集时,转换过程将出现乱码,但对于单字节编码存储中文问题,可参看本文第

5章节的分析

3 )客户端应用字符集、客户端NLS_LANG参数设置、服务器端数据库字符集互不相同此种情况较为复杂,

但三种字符集之间只要有不能转换的字符,则必产生乱码

6、客户端应用字符集:

7、客户端和服务器端的字符集设置一定要一样或者有子集的关系么?
但是服务器端设置AL32UTF8,客户端设置zhs16gbk也是正确的??【待查】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值