|
|
|
|
移动端

美高梅返利送金:探讨Oracle数据库底层存储---字节序和字符集

本文来源:http://www.2233122.com/www_wenkang_cn/

太阳城娱乐网最快登入,  【环球网报道记者朱佩】据俄新社12月7日消息,俄总统普京在俄安全委员会会议上表示,必须完善金融系统对抗网络袭击的机制。但现在,二居室降了1000元;三居室降了2000元。中共中央总书记、国家主席、中央军委主席习近平出席会议并发表重要讲话。  中共内蒙古自治区党委原常委、自治区政府原副主席潘逸阳涉嫌受贿、行贿一案,由最高人民检察院指定北京市人民检察院侦查终结后,移送天津市人民检察院第一分院审查起诉。

   五、铁矿砂、原油、煤等大宗商品进口量增加,主要进口商品价格普遍下跌。  如果此举可以唤醒(人们的)环保意识,那我就非常满意了,虽然需要做的仍有很多,他说。  刘云山说,贯彻习近平总书记重要讲话精神,重在提高思想认识、解决突出问题、抓好任务落实。要加强高校党的基层组织建设,创新体制机制,改进工作方式,提高党的基层组织做思想政治工作能力。

  习近平指出,做好高校思想政治工作,要因事而化、因时而进、因势而新。  王跃思说,雾炮车就是个洒水的东西,就是高效能地把水洒出去。19世纪工业革命的到来带来了社会生活方式和工作效率的巨大改变,踢足球成为了工人们为了缓解工作的压力的一项颇受欢迎的运动。李哲说。

天主要探讨下Oracle数据库底层存储--字节序和字符集,下面一起来看看吧。

作者:波波说运维来源:今日头条|2019-09-11 15:13

 概述

今天主要探讨下Oracle数据库底层存储--字节序和字符集,下面一起来看看吧~

1、字节序

Oracle安装在不同的服务器架构平台,数据文件所采用的字节序也不相同。字节序有两种,Big Endian和Little Endian。比如一般我们Windows或者Linux服务器用的CPU是Intel/AMD架构,那么数据文件保存格式为Little Endian,如果用的是IBM的Power PC,那么数据文件保存格式为Big Endian。

Big Endian和Little Endian具体在保存数据时有什么区别呢?我们举例说明。

整数1920如果用4个字节(十六进制0X00000780)保存,那么在Big Endian的保存方法如下表所示。

探讨Oracle数据库底层存储---字节序和字符集

我们再来看看Little Endian的保存方法。

探讨Oracle数据库底层存储---字节序和字符集

根据上面的内容,我们可以知道在Little Endian下,保存整数1920是反向的

以下列出各个服务器平台的ENDIAN格式。

探讨Oracle数据库底层存储---字节序和字符集

2、字符集

计算机当初发明时大多用来处理数字,后来慢慢的用来处理文字。问题来了,计算机可不认识全世界这么多文字,甚至连26个英文字母也不认识。于是美国国家标准协会ANSI开始制作标准,比如用65表示字母A,用66来表示字母B,包括26个大小写字母,数字和一些符号(100多个),这就是最初的ASCII码。当初ASCII码没有超过128个,只用了7位来表示,最高位留给用作奇偶校验。后来又被欧洲扩展到了8位,可以用来表示256个字符。

ASCII码并没有包括中文,要让计算机认识中文,中国的标准化机构也开始制作了一些标准(GBK)。中国的汉字太多了,用一个字节可装不下这么多(8个二进制位最多表示256个字符),于是采用了2个字节(理论上可以表示65536个字符),其他国家和地区也没有闲着,比如日本的Shift_JIS编码,香港台湾的BIG5编码,于是全世界产生了各种各种的字符编码。

这样问题又来了,而且是大问题。大家都各搞各的,这么多编码,自己本地传输信息当然没有问题。但是当一个中国人发GBK编码的中文邮件给日本人,日本人的电脑如果只认识Shift_JIS编码,那么计算机将会把所有GBK编码按照Shift_JIS编码来解释,于是日本人看到的是所谓的“乱码”。之所以叫所谓,因为计算机自认为它并没有做错,那些“乱码”也是对应的字符,只是不常用,日本人看不懂而已,计算机懂的。

于是地球上的标准化组织领导们又开会讨论了,还提出了一个伟大的想法,这就是UNICODE字符集。这种字符集的想法是用一套字符集把地球上所有的文字都包括进来。当然2个字节可装不下全世界的所有字符,采用了4个字节(理论上可以表示4294967296个字符)。用UNICODE字符集实现的编码有UTF32/UTF16/UTF8。

上面扯了这么多,那么我们在新建数据库的时候,需要选择数据库的数据库字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。比如我们选择数据库字符集为 ZHS16GBK,国家字符集为AL16UTF16。它表示这个数据库里Char,Varchar2采用的是GBK的编码,而Nchar,Nvarchar2,Nclob采用UTF16编码。

探讨Oracle数据库底层存储---字节序和字符集

好,下面我们来做一个试验,看看这些字符集里到底保存了什么内容。

  1. SQL> SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%'
  2. SQL> CREATE TABLE TESTCHAR (COL1 VARCHAR2(100),COL2 NVARCHAR2(100)); 
  3. SQL> INSERT INTO TESTCHAR VALUES('DBSEEKER+广东省广州市','DBSEEKER+广东省广州市'); 
  4. SQL> SELECT DUMP(COL1,16),DUMP(COL2,16) FROM TESTCHAR; 
探讨Oracle数据库底层存储---字节序和字符集
探讨Oracle数据库底层存储---字节序和字符集

在上面我们新建一张表,表有两个字段,COL1的字段类型为VARCHAR2使用的是数据库字符集(ZHS16GBK),COL2的字段类型为NVARCHAR2使用国家字符集(AL16UTF16)。往两个字段插入了同样的文本内容'DBSEEKER+广东省广州市'。

接下来,我们DUMP了字段保存的十六进制内容,观察到字段COL1的长度为21个字节,而字段COL2的长度为30字节,为什么同样的文本内容保存在VARCHAR2和NVARCHAR2里面,底层的存储内容完全不同呢?

原因就在于COL1和COL2使用了不同的字符集,不同字符集对应相同文字编码定义也是不一样的。

COL1使用GBK编码,各个字节对应的字符。

探讨Oracle数据库底层存储---字节序和字符集

COL2使用UTF16编码,各个字节对应的字符。

探讨Oracle数据库底层存储---字节序和字符集

通过上面观察,我们可以知道GBK编码是变长的,英文字母用1个字节保存,汉字用2个字节来保存。而UTF16则都是用2个字节来保存。Oracle数据文件里保存的文本字段内容就是各种编码表相对应的字符编码。

【编辑推荐】

  1. 高性能存储-MySQL数据库之存储过程揭秘
  2. 数据库缓存最终一致性的四种方案,你真的了解过吗?
  3. 云存储性能:可用性和持久性之间的差异
  4. 太阳城娱乐网最快登入西部数据公司产品市场部副总裁朱海翔:用新技术突破存储架构瓶颈,赋能数据中心存储转型
  5. 运维升级篇:Docker网络与存储
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

用Python玩转excel

用Python玩转excel

让重复操作傻瓜化
共3章 | DE8UG

116人订阅学习

AI入门级算法

AI入门级算法

算法常识
共22章 | 周萝卜123

111人订阅学习

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

120人订阅学习

读 书 +更多

J2EE开发全程实录

J2EE是目前企业级软件开发的首选平台。本书从架构的角度讲解了一个完整的J2EE系统的搭建。内容包括:正则表达式、JSP、Swing、XML等技术在...

51CTO服务号

51CTO官微

申博会员登入 升级版申博太阳城直营网 菲律宾太阳娱乐场登入 太阳城申博官方直营网 www.tyc88.com 菲律宾申博代理开户合作
百家乐登入 菲律宾申博游戏登入 菲律宾申博游戏登入 申博太阳城游戏 菲律宾申博开户登入 沙龙游戏怎么登入
电子游戏支付宝充值 申博游戏安卓系统下载 申博娱乐现金网 申博登陆网址 申博娱乐现金网直营 申博亚洲官网登入