Home  >  Article  >  Database  >  oracle中的国家字符集与数据库字符集的区别

oracle中的国家字符集与数据库字符集的区别

WBOY
WBOYOriginal
2016-06-07 15:44:561231browse

原帖地址:http://howieshen.blogbus.com/logs/60501688.html 服务器端:(oracle服务器端字符集) 数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。 1. 字符

原帖地址:http://howieshen.blogbus.com/logs/60501688.html

 

服务器端:(oracle服务器端字符集)
数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。
1. 字符集:
    (1)用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据
    (2)用来标示诸如表名、列名以及PL/SQL变量等
    (3)用来存储SQL和PL/SQL程序单元等
2. 国家字符集:
    (1)用以存储NCHAR, NVARCHAR2, NCLOB等类型数据
    (2)国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,而数据库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的AF16UTF16和UTF8中选择,默认值是AF16UTF16
3. 查询字符集参数:
    可以查询以下数据字典或视图查看字符集设置情况
    nls_database_parameters、props$、v$nls_parameters
    查询结果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符集
4. 修改数据库字符集:
    按照上文所说,数据库字符集在创建后原则上不能更改。如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER

客户端:(NLS_LANG参数)
客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。

国家字符集的不同:(AL16UTF16与UTF-8)
1. AL16UTF16 和 UTF8 这两种选择都适用于国家字符集
2. AL16UFT16 是宽度固定的双字节 Unicode 字符集;UTF8 是宽度可变的、一至三个字节的 Unicode 字符集
3. 欧洲字符在 UTF8 中按一至两个字节存储,而在 AL16UTF16 中按两个字节存储,相比之下,UTF8可以节省空间;亚洲字符在 UTF8 中按三个字节存储,这样,所需的空间比在 AL16UTF16 中要多
4. AL16UTF16 是宽度固定的编码,因此在执行速度上要比宽度可变的 UTF8 快

如果使用EXP/IMP进行数据库的导出/导入,不仅要注意两服务器端之间的字符集的兼容性,而且要考虑到导出/导入过程中,服务器端与客户端之间的字符集的兼容性,特别是导出的时候。

参考文档:
1. http://silverw0396.javaeye.com/blog/90554
2. http://www.itpub.net/redirect.php?fid=2&tid=933582&goto=nextoldset
3. http://www.itpub.net/thread-1042732-1-1.html
4. http://www.itpub.net/viewthread.php?tid=276524
5. http://www.itpub.net/viewthread.php?tid=933964
6. http://database.51cto.com/art/200911/164247.htm
7. http://www.itpub.net/thread-353856-1-1.html


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn