Oracle 字符集

Oracle 全球化

支持全世界的各种语言存储(字符集)
交互语言支持各种语言(sqlplus命令行提示等	)

Language(语言)
Territory(地区)
Character set support(字符集)
排序格式
消息支持
日期和时间支持
数据格式
货币格式

上面的排序格式及日期等格式,受语言设置及地区设置而设置,当然这几种设置也可以各自设置。

字符集是各种字符(varchar等)到二进制数字的编码映射表,告诉计算机如何以二进制存储及取出这些字符。

zhs16gbk: 中国人常用字符集

Unicode 字符集,集合全球语言字符集
UTF8:集合了全球的字符集映射
AL32UTF8 : 相比UTF8,更全面


国家字符集:Nchar,Nvarchar2,Nclob的字段类型的编码格式 AL16UTF16(通常是此格式)
数据库字符集: 存储char,varchar2,clob,long字段类型之外的编码格式


在搞懂Oracle字符集基本原理之前,一定要先分清以下三个概念:
1. Oracle数据库服务器字符集:即Oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置。

select parameter,value from nls_database_parameters where parameter like '%CHARACTERSET%';

PARAMETER		VALUE
NLS_CHARACTERSET	AL32UTF8(数据库字符集)
NLS_NCHAR_CHARACTERSET	AL16UTF16(国家字符集)

2. 客户端操作系统字符集:即客户端操作系统以哪种字符编码存储字符。
如果是Windows,可以使用chcp命令获得代码页(code page):

C:\Users\xianzhu>chcp
Active code page: 936

根据该代码页,到微软的官方文档《National Language Support (NLS) API Reference》找到其对应的字符集。

3. 客户端NLS_LANG参数:该参数用于向Oracle指示客户端操作系统的字符集。

SELECT * FROM V$NLS_PARAMETERS;

SELECT USERENV('language') FROM DUAL;

设置客户端nls_lang 的级别

启动参数->环境参数->alter session 命令->sql 函数
编辑注册表
regedit.exe->hkey_local_machine->software->oraclehome



有了以上3个基本概念之后,我来阐述一下Oracle字符集转换的基本原则:
1.设置客户端的NLS_LANG为客户端操作系统的字符集
2.如果数据库字符集等于NLS_LANG,数据库和客户端传输字符时不作任何转换
3.如果它们俩不等,则需要在不同字符集间转换,只有客户端操作系统字符集是数据库字符集子集的基础上才能正确转换,否则会出现乱码。

当执行一个insert语句,首先网络上只能传递二进制数据,客户端操作系统按照本身的字符集转化为二进制,(比如gbk)
将二进制数据传给Oracle,Oracle通过客户端的nls_lang得知客户端操作系统的字符集,
Oracle服务器根据客户端的字符集先转化,后根据服务器字符集进行存储.(比如UTF-8)

若查询时,若客户端的字符集与服务器端的字符集不一样,Oracle会自动根据客户端的字符集进行转换。(根据客户端的nls_lang环境变量)

注意:客户端的字符集,必须要跟客户端服务器的字符串格式一样。不然在Oracle服务器端进行转换时存在问题。
Oracle服务器存在多种字符集,所以客户端与服务器端转化字符集没问题。
数据库服务器字符集,必须要满足能够存储需要的数据的字符集。


export
依赖于客户端的nls_lang,直接根据客户端的nls_lang进行生产dmp文件。
文件中会记录此文件的格式。


import
根据包里面的格式进行导入

要保证export导出的格式,跟导入的数据库保持一致。

 

你可能感兴趣的:(oracle)