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

[经验分享] oracle常用数据类型

[复制链接]

尚未签到

发表于 2018-9-14 06:42:35 | 显示全部楼层 |阅读模式
  1、Char
  定长格式字符串,在数据库中存储时不足位数填补空格,它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最大32767个字符,作为数据存储在ORACLE8中最大为2000。不建议使用,会带来不必要的麻烦
  a、字符串比较的时候,如果不注意(char不足位补空格)会带来错误
  b、字符串比较的时候,如果用trim函数,这样该字段上的索引就失效(有时候会带来严重性能问题)
  c、浪费存储空间(无法精准计算未来存储大小,只能留有足够的空间;字符串的长度就是其所占用空间的大小)
  2、Varchar2/varchar
  目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
  不定长格式字符串,它的声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据存储在ORACLE8中最大为4000。在多字节语言环境中,实际存储的字符个数可能小于L值,例如:当语言环境为中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保存200个英文字符或者100个汉字字符;对于4000字节以内的字符串,建议都用该类型。
  (a)VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
  (b)VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。不过区别也不是太大,如果就是想用varchar2,那么在发生行迁移,可以通过pctfree来调整,然后对表的数据进行重组nchar,nvarchar/nvarchar2国家字符集,与环境变量NLS指定的语言集密切相关。只有要用到unicode时才会用到这些国家字符集,nchar和nvarchar2依据所选的字符集来存储数据,可能一个字符占两个或多个字节,防止乱码
  3、Long/long raw
  Oracle已经废弃,只是为了向下兼容保留着,应该全部升级到lob
  LONG,在数据库存储中可以用来保存高达2G的数据,作为变量,可以表示一个最大长度为32760字节的可变字符串
  LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节。
  Long类型有很多限制
  a、表中只能有一列long类型
  b、Long类型不支持分布式事务
  c、太多的查询不能在long上使用了
  4、行,包括RAW和LONG RAW两种类型。用来存储二进制数据,不会在字符集间转换
  RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。
  LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节。
  行标识,只有一种类型--ROWID,用来存储“行标识符”,可以利用ROWIDTOCHAR函数来将行标识转换成为字符。
  5、Date
  Date类型是一个7字节的定长数据类型(从世纪到秒),绝对没有“千年虫”问题。
  举个例子:性能a>b>c
  a、Where date_colum>=to_date(’01-jan-2007’,’dd-mon-yyyy’)
  and date_colum< to_date(’02-jan-2007’,’dd-mon-yyyy’)
  b、Where trunc(date_colum,’y’)=to_date(’01-jan-2007’,’dd-mon-yyyy’)
  c、Where to_char(date_colum,’yyyy’)=’2007’
  6、 Timestamp
  ORACLE已经在DATE数据类型上扩展出来了TIMESTAMP数据类型,它包括了所有DATE数据类型的年月日时分秒的信息,
  而且包括了小数秒的信息。如果你想把DATE类型转换成TIMESTAMP类型,就使用CAST 函数
  语法Timestamp(n),n指定秒的小数位数,取值范围0~9。缺省是6。
  select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff8') from dual
  TO_CHAR(SYSTIMESTAMP,'YYYY-MM-
  2010-03-03 20:18:21.31974900
  这是因为显示格式是按照参数NLS_TIMESTAMP_FORMAT定的缺省格式显示。
  说明:
  1)当你把一个表中date类型字段的数据移到另一个表的timestamp类型字段中去的时候,可以直接写INSERT SELECT语句, oracle会自动为你做转换的。
  2) to_char函数支持date和timestamp,但是trunc却不支持TIMESTAMP数据类型
  a.把DATE类型转换成TIMESTAMP类型
  SQL> select cast(sysdate as timestamp) from dual;
  CAST(SYSDATEASTIMESTAMP)
  --------------------------------------------------------------------------------
  03-3月 -10 08.25.31.000000 下午
  正如你看到的,在转换后的时间段尾部有了一段“。000000”。这是因为从date转换过来的时候,没有小数秒的信息,缺省为0
  b. 为了得到系统时间,返回成date数据类型。你可以使用sysdate函数。
  SQL> select sysdate from dual;
  SYSDATE
  -----------
  2010-3-3 20
  c. 为了得到系统时间,返回成timestamp数据类型。你可以使用systimpstamp函数。
  SQL> select systimestamp from dual;
  SYSTIMESTAMP
  --------------------------------------------------------------------------------
  03-3月 -10 08.27.41.114314 下午 +08:00
  d. 你可以设置初始化参数FIXED_DATE指定sysdate函数返回一个固定值。这用在测试日期和时间敏感的代码。注意,这个参数对于systimestamp函数无效。

  SQL>>
  System>  SQL> select sysdate from dual;
  SYSDATE
  -----------
  2006-1-1 10
  SQL> select sysdate from dual;
  SYSDATE
  -----------
  2006-1-1 10
  SQL> select systimestamp from dual;
  SYSTIMESTAMP
  --------------------------------------------------------------------------------
  03-3月 -10 08.31.12.665055 下午 +08:00
  e. 参数fixed_date恢复默认值

  SQL>>
  System>  SQL> select sysdate from dual;
  SYSDATE
  -----------
  2010-3-3 20
  8、Number
  定义Number的方法:Number(p,s) ;其中p,s都是可选的:
  p代表精度,默认为38
  s代表小数位数,取值范围-84~127,默认取值要看是否指定了p,如果制定了p,默认s为0,如果没有指定p,默认取最大值。
  几个例子:
  a、 Number(5,0)=Number(5) 取值范围99999~-99999
  b、 Number(5,2) 取值范围999.99~-999.99
  注意:其中的整数位数只有3位,小数位数有2位,按照如下方法计算:
  整数位数

运维网声明 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-581444-1-1.html 上篇帖子: oracle参数文件的本质 下篇帖子: oracle中的软解析和硬解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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