当前位置:网站首页>Oracle数据类型介绍
Oracle数据类型介绍
2022-08-02 02:20:00 【心寒丶】
数据类型
CHAR
这是一个定长字符串,会用空格填充来达到其最大长度。非null 的CHAR(10)总是包含10字节信息。CHAR字段最多可以存储2000字节的信息。
NCHAR
这是一个包含UNICODE格式数据的定长字符串。Unicode是一种字符编码标准,由Unicode联盟(Unicode Consortium)开发,其目的是为所有语言提供一种对字符进行编码的通用方法,而不论使用的是何种计算机系统或平台。有了NCHAR类型,就允许数据库中包含采用两种不同字符集的数据:使用数据库字符集的CHAR类型和使用国家字符集的NCHAR 类型。非null 的 NCHAR(10)总是包含10个字符的信息(注意,在这方面,它与CHAR类型有所不同)。NCHAR字段最多可以存储2000字节的信息。
VARCHAR2
目前这也是VARCHAR 的同义词。这是一个变长字符串,与CHAR类型不同,它不会用空格填充至最大长度。VARCHAR2(10)可能包含0~10字节的信息(使用默认NLS 设置)。VARCHAR2最多可以存储4 000字节的信息。
NVARCHAR2
这是一个包含UNICODE格式数据的变长字符串。NVARCHAR2(10)可以包含0~10个字符的信息。NVARCHAR2最多可以存储4000字节的信息。
RAW
这是一种变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。可以把它看做由数据库存储的信息的二进制字节串。这种类型最多可以存储2000字节的信息。
NUMBER
这种数据类型能存储精度最多达38位的数字。这些数介于1.0×10 (-130)~(但不包括)1.0×10 (126)之间。每个数存储在一个变长字段中,其长度在0(尾部的NULL列就是0字节)~22字节之间。Oracle的 NUMBER类型精度很高,远远高于许多编程语言中常规的FLOAT和DOUBLE类型。
BINARY_FLOAT
这是Oracle Database 10g Release 1及以上版本中才有的一种新类型。它是一个32位单精度浮点数,可以支持至少6位精度”,占用磁盘上5字节的存储空间。
BINARY_DOUBLE
这是一种Oracle Database 10g Release 1及以上版本中才有的新类型。它是一个64位双精度浮点数,可以支持至少13位精度,占用磁盘上9字节的存储空间。
LONG
这种类型能存储最多2GB的字符数据(2GB是指2千兆字节,而不是2千兆字符,因为在一个多字节字符集中,每个字符可能有多个字节)。由于LONG类型有许多限制,而且提供LONG类型只是为了保证向后兼容性,所以强烈建议新应用中不要使用LONG类型,而且在现有的应用中也要尽可能将LONG类型转换为CLOB类型。
LONG RAW
LONG RAW类型能存储多达2GB的二进制信息。由于LONG同样的原因,建议在将来的所有开发中都使用BLOB类型,另外现有的应用中也应尽可能将LONG RAW转换为BLOB类型。
DATE
这是一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。
TIMESTAMP
这是一个7字节或11字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒(fractional second),带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
TIMESTAMP WITH TIME ZONE
与前一种类型类似,这是一个13字节的定宽TIMESTAMP,不过它还提供了时区(TIME ZONE)支持。数据中会随TIMESTAMP存储关于时区的额外信息,所以原先插入的TIME ZONE会与数据一同保留。
TIMESTAMP WITH LOCAL TIME ZONE
与TIMESTAMP类似,这是一种7字节或11字节的定宽日期/时间数据类型,不过,这种类型对时区敏感(time zone sensitive)。如果在数据库中有修改,会参考数据中提供的TIMEZONE,根据数据库时区对数据中的日期/时间部分进行“规范化”“。所以,如果你想使用U.S./Pacific时区插入一个日期/时间,而数据库时区为U.S./Eastern,最后的日期/时间信息会转换为Eastern时区的日期/时间,并像TIMESTAMP一样存储。获取这个数据时,数据库中存储的TIMESTAMP.将转换为会话时区的时间。
INTERVAL YEAR TO MONTH
这是一个5字节的定宽数据类型,用于存储一个时段,这个类型将时段存储为年数和月数。可以在日期运算中使用这种时间间隔使一个DATE或TIMESTAMP类型增加或减少一段时间
INTERVAL DAY TO SECOND
这是一个11字节的定宽数据类型,用于存储一个时段,这个类型将时段存储为天/小时/分钟/秒数,还可以有最多9位的小数秒。
BFILE
这种数据类型允许在数据库列中存储一个Oracle目录对象(操作系统目录的一个指针)和一个文件名,并读取这个文件。这实际上允许你以一种只读的方式访问数据库服务器上可用的操作系统文件,就好像它们存储在数据库表本身中一样。
BLOB
在 Oracle Database 9i及以前的版本中,这种数据类型允许存储最多4GB的数据,在Oracle Database 10g及以上的版本中允许存储最多(4 GB)×10(数据库块大小)字节的数据。BLOB包含不需要进行字符集转换的“二进制”数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用这种数据类型。
CLOB
在Oracle Database 9i及以前的版本中,这种数据类型允许存储最多4GB的数据,在Oracle Database 10g及以上的版本中允许存储最多(4 GB)×10(数据库块大小)字节的数据。CLOB包含要进行字符集转换的信息。这种数据类型很适合存储大块纯文本信息。注意这里我提到的“大”纯文本信息。如果你的纯文本信息只有4000字节或者更少,那么这种数据类型并不适用,因为在这种情况下你可能更愿意使用VARCHAR2数据类型。
NCLOB
在Oracle Database 9i及以前的版本中,这种数据类型允许存储最多4GB的数据,在Oracle Database 10g 及以上的版本中允许存储最多(4 GB)×10(数据库块大小)字节的数据。NCLOB存储用数据库国家字符集编码的信息,而且像CLOB一样,这些信息要进行字符集转换。
字符和二进制串类型
Oracle中的字符数据类型包括CHAR、VARCHAR2以及带“N”的相应“变体”(NCHAR 和 NVARCHAR2),这些字符数据类型能存储2000字节或4000字节的文本。这些文本会由数据库根据需要在不同字符集之间转换。字符集(character set)是各个字符的一种二进制表示(用位和字节表示)。目前有多种不同的字符集,每种字符集能表示不同的字符。
字符串
Oracle中有4种基本的字符串类型,分别是CHAR、VARCHAR2、NCHAR和NVARCHAR2。在Oracle中,所有串都以同样的格式存储。CHAR/NCHAR实际上只是伪装的VARCHAR2和NVARCHAR2,基于这一点,所以我认为其实只需要考虑两种空符串类型,VARCHAR2和NVARCHAR2。不论在表段还是任何索引段中,CHAR都会占用最大的存储空间。
数值类型
Oracle Database 10g及以上版本支持3种固有数据类型来存储数值(NUMB
ER,BINARY_FLOAT,BINARY_DOUBLE)。Oracle Database 9i Release 2及以前的版本只支持一种适合存储数值数据的固有数据类型。以下所列的数据类型中,NUMBER类型在所有Oracle版本中都得到支持,后面两种类型是新的数据类型,只有Oracle Database 10g及以上的版本才支持。
Oracle NUMBER类型比BINARY_FLOAT和BINARY_DOUBLE类型的精度大得多,但是取值范围却远远小于BINARY_DOUBLE。也就是说,用 NUMBER类型可以很精确地存储数值(有很多有效数字),但是用BINARY_FLOAT和BINARY_DOUBLE类型可以存储更小和更大的数值。
LONG和LONG RAW类型的限制
可以看到,如果表中有一个LONG列,那么很多事情都不能做。对于所有新的应用,甚至根本不该考虑使用LONG类型。相反,应该使用适当的LOB类型。对于现有的应用,如果受到所列的某个限制,就应该认真地考虑将LONG类型转换为相应的LOB类型。由于已经做了充分考虑来提供向后兼容性,所以编写为使用LONG类型的应用也能透明地使用LOB类型。
时间类型
Oracle固有数据类型DATE、TIMESTANP和INTERVAL是紧密相关的。DATE和TIMESTANP类型存储精度可变的固定日期/时间。INTERVAL类型可以很容易地存储一个时间量,如“8个小时”或“30天”。将两个时间戳相减,就会得到一个时间间隔(INTERVAL)。例如,将8小时间隔加到一个TIMESTAMP上,会得到8小时以后的一个新的TIMESTAMP。Oracle的很多版本中都支持DATE数据类型,DATE数据类型是存储日期/时间信息最为常用的类型。但是许多新应用都在使用TIMESTANP类型,这有两个原因:一方面它支持小数秒,而DATE类型不支持,另一方面TIMESTANP类型支持时区,这也是DATE类型力所不能及的。
边栏推荐
- 周鸿祎称微软抄袭,窃取360安全模式
- Outsourcing worked for three years, it was abolished...
- messy website
- BI - SQL 丨 WHILE
- LeetCode Brushing Diary: 74. Searching 2D Matrix
- Centos7 install postgresql and enable remote access
- Nanoprobes纳米探针丨Nanogold偶联物的特点和应用
- "NetEase Internship" Weekly Diary (1)
- swift project, sqlcipher3 -> 4, cannot open legacy database is there a way to fix it
- Redis Subscription and Redis Stream
猜你喜欢
Good News | AR opens a new model for the textile industry, and ALVA Systems wins another award!
MySQL optimization strategy
[LeetCode Daily Question]——654. The largest binary tree
2022河南青训联赛第(三)场
[LeetCode Daily Question] - 103. Zigzag Level Order Traversal of Binary Tree
Entry name 'org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt' collided
Install mysql using docker
AWR analysis report questions for help: How can SQL be optimized from what aspects?
接口测试神器Apifox究竟有多香?
Data transfer at the data link layer
随机推荐
记一个gorm初始化的坑
接口测试神器Apifox究竟有多香?
PHP live source code to achieve simple barrage effect related code
机器人领域期刊会议汇总
NAS和私有云盘的区别?1篇文章说清楚
AWR analysis report questions for help: How can SQL be optimized from what aspects?
leetcode/字符串中的变位词-s1字符串的某个排列是s2的子串
NIO‘s Sword(牛客多校赛)
【 wheeled odometer 】
使用docker安装mysql
[ORB_SLAM2] void Frame::ComputeImageBounds(const cv::Mat & imLeft)
Redis 底层的数据结构
2022河南青训联赛第(三)场
Project Background Technology Express
LeetCode 213. Robbery II (2022.08.01)
Golang分布式应用之Redis
考完PMP学什么?前方软考等着你~
nacos启动报错,已配置数据库,单机启动
[ORB_SLAM2] SetPose, UpdatePoseMatrices
Redis Persistence - RDB and AOF