Acfe 发表于 2018-9-13 09:23:14

oracle内部的数据类型datatype

  Oracle data types
  这一章介绍的是oracle内置的数据类型,它们的属性,还有它们如何映射到非oracle数据类型中。
  Oracle数据类型的介绍
  SQL语句中的每一行的值和常数都有一个数据类型,他们和特定的存储格式,约束和值的范围有关系。
  你创建一个表的时候,必须要给每一行都制定一个数据类型。
  字符型数据类型
  字符型数据类型把字符存储在字符串中。
  Oracle内部的字符集在创建数据库的时候已经确定。
  CHAR数据类型
  CHAR数据类型存储的是固定长度的字符串。你创建一个CHAR行,必须要制定一个字符串的长度(以byte或者字符)长度是在1-2000byte。默认是1byte。
  Oracle规定:
  插入或者update表里的一行时,char行有固定的大小。
  如果你插入一个shorter的value,这个值会使用blank-padded到固定的大小。
  如果值太大,oracle database会返回错误。
  VARCHAR2和VARCHAR数据类型
  VARCHAR2数据类型存储存储可变长度的字符串。创建一张表,表里有个varchar2格式的行,你必须确定最大的字符串长度(bytes,或者character)1-4000.每一行,oracle database把每一行的数据存储成为可变大小的,除非长度超过字段的最大长度,超过字段的最大长度之后,oracle会返回error。使用varchar2和varchar可以节省表的存储空间。
  比如:你声明了一个字段最大长度50,如果只有10个字符插入到这个字段中,这个字段只存储10个字符,而不是50个。
  VARCHAR数据类型
  Varchar数据类型和varchar2是同义词。为了避免改变,通常我们使用VARCHAR2。
  Single-byte:单字节。Multiple-byte:多字节
  英文字母属于单byte字符,汉字属于多byte字符。
  单字节:byte 比特是最小的数值单位:bit。
  Bit和byte的关系:
  Bit:binary digit:二进制数字,二进制数字
  字符数据类型的长度语义
  全球化支持允许不同种类的字符集对应字符数据类型。全球化支持让你可以处理单字节和多字节字符数据,而且可以在字符集之间做自由转变。客户端会话可以使用和database字符集不同的客户端字符集。
  当你指定字符数据类型的字段长度的时候,考虑一下字符的大小。一张表的字段存储有字符数据的时候,你预估这张表的存储空间的时候,必须要考虑这个问题。
  字符数据类型的长度语义可以使用bytes或者字符来衡量。
  字节语义把字符串当做一个bytes的序列。这是字符数据类型默认的。
  字符语义把字符串当做一个字符的序列,一个字符在技术角度而言是一个database字符集的编码点。
  对于单字节的字符集,字符语义定义的字段和bytes语义定义的一样。字符语义和
  数字数据类型
  数字数据类型存储正,负,确定的和浮点型数字,0,infinity和不确定的操作结果的值。
  包括以下的值:
  数字数据类型
  数字数据类型存储固定的和浮点型数字。实际上任何量级的数字都可以被存储,可以在不同的运行oracle database的操作系统上相互移植,最大精度可以到到38位。
  下面的数字可以被存储在一个NUMBER的字段中:
  1 x 10-130 to9.99...9 x 10125范围的正数,最大精度可以到达38位
  1 x 10-130 to9.99...9 x 10125范围的负数,最大精度可以到达38位
  0
  正无穷和负无穷。
  数字类型的字段,你可以指定这一行:column_name,NUMBER
  或者,你可以制定一个精度和scale(小数点右边的数字位数)
  Column_nameNUMBER(precision,scale)
  如果precision没有被指定,字段会以源数据来存储,如果scale没有指定,scale就是0.
  Oracle保证了一个精度在38以内的数据可移植性。你可以制定一个scale和没有precision
  Column_nameNUMBER(*,scale),这个是:精度是38位,指定的scale是可以获得的。
  当你指定数字的时候,同时制定规模和精度是件好事,可以在数据输入的时候进行更细致的检查。
  下表显示的是:插入数字的信息和数字的格式设定作用之后的结果

  内部数字格式
  Oracle database存储数字以一个可变的长度,每一个值都存储在一个科学的符号,1byte来存放指数,20个bytes以上来存放尾数,结果的值是限定在38位,oracle database不会存储开头和结尾的0,比如412是4.12 x 102                      ,用一个字节来存放指数2,另外两个字节存放412。负数的话存放在他们的长度中存放负号。
  综上所述:字段的字节长度是由一个值决定的NUMBER(p),p是所给值的precision,是通过以下的值来计算的:
  ROUND((length(p)+s)/2))+1
  如果数字是正,s=0,如果s是负数,s=1.
  0,正无穷和负无穷是通过独有的表示来存储的,0和负无穷需要1bytes,正无穷需要2bytes。
  浮点型数字

页: [1]
查看完整版本: oracle内部的数据类型datatype