日期:2014-05-16  浏览次数:20507 次

Oracle字符集问题

????? 计算机只能识别0和1,对于人类社会复杂的文字无法直接识别,需要通过对字符编码,给每个字符设定一个二进制编码。

????? 字符编码方式主要分为以下两种:

?????

????? 1. 单字节编码?????????

a. 最早的编码为US7ASII,采用1个字节中的7位来编码,共有128中组合,以满足美国的语言,但这种编码支持的字 符数太少;

b. 随之出现了8位的编码方案,共有256种组合,如WE8ISO8859P1,满足了西欧国家的需求,但亚洲国家文字较为复杂,该编码方案仍旧无法满足,需要更大的编码空间,于是多字节编码出现了

?

??????2. 多字节编码

a. 定长多字节,采用固定字节长度来保存字符编码,如AF16UTF16

???

b. 变长多字节,采用变字节长度来保持字符编码,如ZHS16GBK,ZHS16CGB231280,AL32UTF8

?

多个字节的编码空间能满足所有文字的需求,使各种语言国家都能使用计算机

?

????? 从ORACLE的角度也可分为两种:

?

????? 1. 数据库服务器字符集

服务器端分为数据库字符集和国家字符集,在建库时确定,一般运行时不要修改字符集,虽然可以通过如下语句修改

?

alter database character set '新字符集名称';

?

可以通过以下几个视图和表来查看服务器的字符集

nls_database_parameters

props$

v$nls_parameters

?

??????2. 客户端字符集

客户端字符集在ORACLE中指NLS_LANG的设置,但客户端真正的字符编码方案要看系统环境而定,可以在CMD中输入 chcp 来查看系统的字符编码,这里谈谈NLS_LANG的作用

?

NLS_LANG的作用主要在于通知ORACLE服务器,在客户端使用的字符编码,默认与操作系统环境的编码一致,也可以手动进行修改,当修改后的编码与服务器的编码非超集关系时,在SQLPLUS中显示查询结果、EXP/IMP等情况下将发生字符集转换,若转化不成功即出现乱码。

?

?

有任何问题可以加入我们的ORACLE群:84549521

共同学习,共同进步!?