设为首页 收藏本站
查看: 906|回复: 0

[经验分享] oracle内部的数据类型datatype

[复制链接]

尚未签到

发表于 2018-9-13 09:23:14 | 显示全部楼层 |阅读模式
  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是可以获得的。
  当你指定数字的时候,同时制定规模和精度是件好事,可以在数据输入的时候进行更细致的检查。
  下表显示的是:插入数字的信息和数字的格式设定作用之后的结果
DSC0000.jpg

  内部数字格式
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-577426-1-1.html 上篇帖子: oracle 10g 手动建库 笔记 下篇帖子: oracle数据库再深入(四)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表