oracle 存储负数的类型,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是可以获得的。

当你指定数字的时候,同时制定规模和精度是件好事,可以在数据输入的时候进行更细致的检查。

下表显示的是:插入数字的信息和数字的格式设定作用之后的结果

989381d8f823507333093288b9eea752.png

内部数字格式

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。

浮点型数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值