彻底搞懂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!

人工智能实验室
相关文章相关文章
  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

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

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...