彻底搞懂Oracle字符集

  次阅读 作者:智能小宝 来源:互联网 2016-01-28 13:12 我要评论(0)

以下是对Oracle中的字符集进行了详细的分析介绍,需要的朋友可以参考下

基本概念字符集(Character set):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有ASCII,ZHS16GB231280,ZHS16GBK等。

字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其它的一个集合(如电脑编码)进行配对。即在符号集合与数字系统之间建立对应关系。与字符集相对应,常见的字符编码有:ASCii,ZHS16GBK,ZHT16BIG5,ZHS32GB18030等。

字符集的定义其实就是字符的集合,而字符编码则是指怎么将这些字符变成字节用于保存、读取和传输。万国码(Unicode):包含了几乎人类所有可用的字符,每年还在不断的增加,可以看作是一种通用的字符集。它将全世界所有的字符统一化,统一编码,不会再出现字符不兼容和字符转换的问题。它有以下三种编码方式:1.UTF-32编码:固定使用4个字节来表示一个字符,存在空间利用效率的问题。2.UTF-16编码:对相对常用的60000余个字符使用两个字节进行编码,其余的使用4字节。3.UTF- 8编码:兼容ASCII编码;拉丁文、希腊文等使用两个字节;包括汉字在内的其它常用字符使用三个字节;剩下的极少使用的字符使用四个字节。

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

复制代码 代码如下:

SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

PARAMETERVALUE

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

NLS_CHARACTERSETAL32UTF8

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

复制代码 代码如下:

C:Usersxianzhu>chcp

Active code page: 936

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

如果是Linux,字符集在/etc/sysconfig/i18n设置:

复制代码 代码如下:

LANG="zh_CN.GB2312" (指定当前操作系统的字符集)

SUPPORTED="zh_CN.GB2312"(指定当前操作系统支持的字符集)

SYSFONT="lat0-sun16"(指定当前操作系统的字体)

3. 客户端NLS_LANG参数:该参数用于向Oracle指示客户端操作系统的字符集。有了以上3个基本概念之后,我来阐述一下Oracle字符集转换的基本原则:

1.设置客户端的NLS_LANG为客户端操作系统的字符集

2.如果数据库字符集等于NLS_LANG,数据库和客户端传输字符时不作任何转换

3.如果它们俩不等,则需要在不同字符集间转换,只有客户端操作系统字符集是数据库字符集子集的基础上才能正确转换,否则会出现乱码。几种常见情况分析下面先看一个例子,再透过现象看本质,我们会针对这个例子进行分析。

该例子如下:

复制代码 代码如下:

1. 数据库字符集为Unicode(UTF-8编码)我们的数据库版本是10.2.0.4.0,数据库字符集是:

SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

PARAMETERVALUE

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

NLS_CHARACTERSETAL32UTF82. 客户端操作系统字符集为代码页936(字符集为ZHS16GBK)可以使用chcp获得windows代码页(code page)

C:Documents and Settingsa105024Desktop>chcp

Active code page: 9363. 创建测试表SQL> create table test(id number,var varchar2(30));

Table created.4. 插入数据这里在同一个操作系统启动两个session,session1的NLS_LANG设为和数据库字符集一样(即AL32UTF8):

C:Documents and Settingsa105024Desktop>set nls_lang=Simplified Chinese_China.AL32UTF8

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...