知识大全 Oracle基本数据类型存储格式浅析(一)-字符类型

Posted 类型

篇首语:研卷知古今;藏书教子孙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle基本数据类型存储格式浅析(一)-字符类型相关的知识,希望对你有一定的参考价值。

Oracle基本数据类型存储格式浅析(一)-字符类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  前一阵看完文档 对oracle的基本数据类型的存储格式有了一些了解 最近有做了一些测试进行了验证

  打算整理总结一下 这一篇主要说明字符类型的存储格式 主要包括char varchar 和long等几种类型

  SQL> create table test_char (char_col char( ) varchar_col varchar ( ) long_col long);

  表已创建

  SQL> insert into test_char values ( abc fd );

  已创建 行

  SQL> mit;

  提交完成

  SQL> select rowid from test_char;

  ROWID AAAB LAAFAAAAAgAAA

  根据rowid的定义规则 第 ~ 位是表示的是数据文件 F表示 而 ~ 位表示的是在这个数据文件中的第几个BLOCK g表示 (rowid编码相当于 进制 用A~Z a~z ~ + /共 个字符表示 A表示 B表示 …… a表示 …… 表示 …… +表示 /表示 )

  我们根据计算的结果去dump这个block

  SQL> ALTER SYSTEM DUMP DATAFILE BLOCK ;

  系统已更改

  打开产生的trace文件

  data_block_dump data header at x ===============tsiz: x f hsiz: x pbl: x bdba: x      flag= ntab= nrow= frre= fsbo= x fseo= x f avsp= x f etosp= x f e xe:pti[ ] nrow= offs= x :pri[ ] offs= x f block_row_dump:tab row @ x f tl: fb: H FL lb: x   cc: col  : [ ]  col  : [ ]  col  : [ ]  c end_of_block_dumpEnd dump data blocks tsn: file#: minblk maxblk

  观察dump出来的结果 可以发现以下几点

   对于每个字段 除了保存字段的值以外 还会保存当前字段中数据的长度 而且 oracle显然没有把字段的长度定义或类型定义保存在block中 这些信息保存在oracle的数据字典里面

   根据dump的结果 可以清楚的看到 字符类型在数据库中是以ascii格式存储的

  SQL> select chr(to_number( xx )) from dual;

  CH a

   char类型为定长格式 存储的时候会在字符串后面填补空格 而varchar 和long类型都是变长的

  SQL> SELECT DUMP(CHAR_COL ) D_CHAR FROM TEST_CHAR;

  D_CHAR Typ= Len= :

  SQL> SELECT DUMP(VARCHAR_COL ) D_VARCHAR FROM TEST_CHAR;

  D_VARCHAR Typ= Len= :

  SQL> SELECT DUMP(LONG_COL ) D_VARCHAR FROM TEST_CHAR;SELECT DUMP(LONG_COL ) D_VARCHAR FROM TEST_CHAR            *ERROR 位于第 行:ORA : 非法使用 LONG 数据类型

  由于DUMP不支持LONG类型 因此我们使用了alter system dump block的方式 通过比较两种方式得到的结果 发现DUMP()函数不但方便 结果清晰 而且指出了进行DUMP的数据类型 在以后的例子中 除非必要的情况 否则都会采用DUMP()函数的方式进行说明

  下面看一下插入中文的情况 首先看一下数据库的字符集

  SQL> select name value$ from sys props$ where name like %CHARACTERSET% ;

  NAME                           VALUE$ NLS_CHARACTERSET               ZHS GBKNLS_NCHAR_CHARACTERSET         AL UTF

  SQL> insert into test_char values ( 定长 变长 null);

  已创建 行

  SQL> SELECT DUMP(CHAR_COL ) D_CHAR FROM TEST_CHAR;

  D_CHAR Typ= Len= : Typ= Len= : b a b a

  SQL> SELECT DUMP(VARCHAR_COL ) D_VARCHAR FROM TEST_CHAR;

  D_VARCHAR Typ= Len= : Typ= Len= : b e b a

  根据dump结果 可以清楚的看出 普通英文字符和标点用一个字节表示 而中文字符或中文标点需要两个字节来表示

  下面 对比一下nchar和nvarchar 与char varchar 类型有什么不同

  SQL> create table test_nchar (nchar_col nchar( ) nvarchar_col nvarchar ( ));

  表已创建

  SQL> insert into test_nchar values ( nchar定长 nvarchar变长 );

  已创建 行

  从这里已经可以看出一些不同了 如果按照刚才中文的计算方法 nvarchar变长 的长度是 + * = 已经超过了数据类型定义的大小 可是为什么插入成功了?

  还是dump一下看看结果吧

  SQL> select dump(nchar_col ) from test_nchar;

  DUMP(NCHAR_COL ) Typ= Len= : e b a f

  SQL> select dump(nvarchar_col ) from test_nchar;

  DUMP(NVARCHAR_COL ) Typ= Len= : e d f

cha138/Article/program/Oracle/201311/18368

相关参考

知识大全 Oracle基本数据类型存储格式浅析—日期类型(3)

Oracle基本数据类型存储格式浅析—日期类型(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 详细介绍oracle数据库字符集

  一什么是oracle字符集  Oracle字符集是一个字节数据的解释的符号集合有大小之分有相互的包容关系ORACLE支持国家语言的体系结构允许你使用本地化语言来存储处理检索数据它使数据库工具错误消

知识大全 用hibernate查询一段时间的记录

  这是在一个群里讨论的问题  方法很多如果说数据库中数据的存储是用date类型的话改怎么做如果说做数据迁移的话又该怎么做?  最终的讨论方案在用字符串存储格式上比较好毕竟各个数据库对时间的存储存在差

知识大全 浅析Js(Jquery)中,字符串与JSON格式互相转换的示例

浅析Js(Jquery)中,字符串与JSON格式互相转换的示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Oracle数据类型及存储方式

Oracle数据类型及存储方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  概述  通过实例全

知识大全 oracle字符集文档

  Oracle字符集是一个字节数据的解释的符号集合有大小之分有相互的包容关系ORACLE支持国家语言的体系结构允许你使用本地化语言来存储处理检索数据它使数据库工具错误消息排序次序日期时间货币数字和日

知识大全 线性表 - 链式存储结构- 单链表的运算(一)

  单链表的运算  建立单链表  假设线性表中结点的数据类型是字符我们逐个输入这些字符型的结点并以换行符\\n为输入条件结束标志符动态地建立单链表  的常用方法有如下两种  ()头插法建表  ①算法思

知识大全 浅析.Net Micro Framework的数据永久存储

浅析.NetMicroFramework的数据永久存储  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 oracle数据字符集和排序

  今天难得有点小时间实际操作了一下关于oracle数据库中的字符集和排序相关的命令特此整理出来以备后用  Java代码  SQL>select*fromv$nls_valid_valueswh

知识大全 概论- 基本概念和术语(一)

  数据(Data)  数据是信息的载体它能够被计算机识别存储和加工处理是计算机程序加工的原料  随着计算机应用领域的扩大数据的范畴包括整数实数字符串图像和声音等  数据元素(DataElement)