Oracle服务端与客户端字符集

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle客户端与服务端字符集

Oracle 数据库对字符的处理及表现形式分为三个层面,优先级先后分别是数据库初始化参数字符集、OS操作系统环境变量级、session级。

数据库初始化参数字符集是在建数据库前指定的字符集,使用如下语句查询数据库字符集:

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

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

完整字符集名称分为三部分:语言_地域.字符集,这里以

AMERICAN_AMERICA.ZHS16GBK 和SIMPLIFIED CHINESE_CHINA.ZHS16GBK 为例说明各部分的含义:

语言决定了提示信息使用的语言,如AMERICAN表示使用英语,SIMPLIFIED CHINESE表示使用简体中文;

地域决定了缺省的日期格式等,如:

AMERICA的时间格式为:

SQL>select sysdate from dual;

SYSDATE

------------

20-AUG-12

CHINA的时间格式为:

SQL>select sysdate from dual;

SYSDATE

--------------

20-8月-12

字符集的格式为<语言><比特位数><编码>比如: ZHS16GBK表示采用GBK 编码格式、16位(两个字节)简体中文字符集。

数据库建立后字符集原则上不要修改,如果修改可以用命令alter database set character set xxx; 不过这样修改有一定的危险,有可能会出现乱码造成数据的丢失,而且修改后的字符集一定是修改前字符集的超集,修改数据库字符集一般采用两种方法:

1.导出数据库数据,重建数据库,再导入数据库数据的方式来转换。

2.通过ALTER DATABASE CHARACTER SET语句修改字符集,具体操作

如下:

1)关闭数据库

SQL>SHUTDOWN IMMEDIATE

2)启动到Mount

SQL>STARTUP MOUNT;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;

SQL>ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

注:启动数据库后应将有改动的JOB_QUEUE_PROCESSES、AQ_TM_PROCESSES等参数修改为原有值。

NLS_CHARACTERSET设置服务器的字符集。

NLS_LANG客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用。如:当某客户端的NLS_LANG配置的字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280,但Oracle服务端配置的字符

集为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这样通过客户端操作的字符数据将ZHS16CGB231280字符集编码,则可能导致一些ZHS16CGB231280字符集中不包含的特殊字符出现乱码。

SQL> select '闫珅豪' from dual;

'闫?豪'

------------

闫?豪

因此在配置客户端字符集时应与Oracle服务端字符集保持一致,但是语言设置却可以不同,语言设置建议用英文。

设置客户端字符集可修改.cshrc或.bash_profile配置文件中的NLS_LANG与Oracle服务端一致的字符集,或使用如下命令:

cshrc:

setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

bash_profile:

export NLS_LANG='SIMPLIFIED CHINESE'_CHINA.ZHS16GBK

总之,当业务数据存入数据库后中文字符出现乱码时,我们应当查看对数据库存在DML操作的子系统所在服务器配置的NLS_LANG,如果与数据库的字符集不一致,则需修改服务器的NLS_LANG与数据库字符集保持一致;同时,在创建数据库时选择正确的数据库字符集十分重要,这样可以避免由于修改数据库字符集造成的数据异常问题。

附录:Oracle字符集子集、超集对照表

Oracle字符集子集

、超集对照表.docx

相关文档
最新文档