在工作期间会遇到数据库建表的业务,经常会使用复制粘帖等操作,而不清楚数据库的字段类型。本文记录了 Oracle 数据库常见字段类型,根据不同的数据需求,可以选择不同的字段类型来存储数据。
文章目录
-
- 一、字符类型(Character)
- 二、数值类型(Numeric)
-
- 1、NUMBER:用于存储整型或浮点型数值。
- [2、INTEGER 或 INT :整数类型](#2、INTEGER 或 INT :整数类型)
- 3、FLOAT:浮点数类型
- 4、REAL:实数类型
- [三、日期和时间类型(Date and Time)](#三、日期和时间类型(Date and Time))
- [四、二进制大对象类型(Binary Large Object)](#四、二进制大对象类型(Binary Large Object))
- 五、其他类型
-
- 1、RAW:存储原始二进制数据
- 2、LONG:存储超长字符串数据
- [3、LONG RAW:存储可变长度的二进制数据](#3、LONG RAW:存储可变长度的二进制数据)
- 4、ROWID:用于唯一标识数据库中的行
- 5、BFILE:在数据库外部存储大型二进制对象文件
- 6、BOOLEAN:布尔类型
- 7、XML:用于存储XML文档数据。
- [8、用户自定义类型(User Defined Type)](#8、用户自定义类型(User Defined Type))
- 六、数据类型选择的注意事项
一、字符类型(Character)
1、CHAR:定长字符数据类型
存储固定长度的字符串,最大长度为2000字节,如果存储的字符串长度小于定义的长度,Oracle会自动用空格填充至指定长度。
sql
CREATE TABLE example_table (
example_column CHAR(10)
);
使用 CHAR(n)
是存储长度固定为 n
个字节,如果存储的数据长度小于 n
,则使用空格填充,n
的取值范围是 1 到 2000。当插入数据时,example_column
列将始终占用 10 个字节的存储空间,无论实际存储的字符长度是多少。
2、VARCHAR2:变长字符数据类型
存储可变长度的字符串,最大长度为4000字节,该类型在实际使用中非常灵活,因为它只占用实际字符串所需的存储空间,而不需要额外的空格填充。
sql
CREATE TABLE example_table (
example_column VARCHAR2(20)
);
此列仅存储实际输入字符所需的字节数,最大不超过 20 个字节,最大长度为 n
个字节。n
的取值范围是 1 到 4000。
3、NCHAR:存储Unicode字符集的固定长度字符串
存储 Unicode 字符集的固定长度字符串,最大长度为2000字节(在某些版本中可能为1000字节),适用于需要存储国际化字符集的数据。
sql
CREATE TABLE example_table (
nchar_column NCHAR(10)
);
定义一个长度为 10 的 NCHAR 类型的列,用于存储定长的 Unicode 字符数据。存储的字符将根据数据库的国家字符集进行编码,通常用于存储多语言数据。
4、NVARCHAR2:存储Unicode字符集的可变长度字符串
存储 Unicode 字符集的可变长度字符串,最大长度为4000字节(在某些版本中可能为1000字节),同样适用于国际化字符集的数据存储。
sql
CREATE TABLE example_table (
nvarchar2_column NVARCHAR2(20)
);
定义一个长度为 20 的 NVARCHAR2 类型的列,用于存储变长的 Unicode 字符数据。
二、数值类型(Numeric)
1、NUMBER:用于存储整型或浮点型数值。
用于存储整型或浮点型数值,可以指定精度(有效数字的位数)和小数位数。如果没有指定精度,Oracle将使用 38
作为默认精度。
创建时常用 NUMBER(p, s)
,存储精度为 p
、小数位数为 s
的数值,即 p
表示数字的总长度,s
表示小数位数。
sql
CREATE TABLE example_table (
numeric_column NUMBER(10, 2)
);
可以存储最大长度为 10 位的数字,其中包含 2 位小数,如 1234567.89。
2、INTEGER 或 INT :整数类型
是NUMBER的一个子集,用于存储小的整数,等同于 NUMBER(38)
。
sql
CREATE TABLE example_table (
integer_column INTEGER
);
sql
CREATE TABLE example_table (
integer_column INT
);
3、FLOAT:浮点数类型
是NUMBER的一个特殊表示,用于存储双精度浮点数。
sql
CREATE TABLE example_table (
float_column FLOAT
);
float_column FLOAT:存储单精度浮点数。
4、REAL:实数类型
同样是NUMBER的一个特殊表示,但精度更高,可达63位。
sql
CREATE TABLE example_table (
real_column REAL
);
存储单精度浮点数,比 FLOAT 精度稍低,是 ANSI SQL 兼容的数据类型。
三、日期和时间类型(Date and Time)
1、DATE:存储日期和时间,精确到秒
储日期和时间,包括年、月、日、时、分、秒,精确到秒,范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。Oracle在内部使用7个字节来保存日期数据。
sql
CREATE TABLE example_table (
date_column DATE
);
2、TIMESTAMP:时间戳数据类型
存储日期和时间,精确到秒的小数部分,可精确到纳秒,提供了比 DATE
更高的精度。
sql
CREATE TABLE example_table (
timestamp_column TIMESTAMP
);
3、INTERVAL:用于表示两个时间点之间的时间间隔
用于表示两个时间点之间的时间间隔
sql
CREATE TABLE example_table (
interval_column INTERVAL DAY TO SECOND
);
存储时间间隔,精确到秒,范围从天到秒。
四、二进制大对象类型(Binary Large Object)
1、BLOB:存储二进制对象
存储二进制大对象,可存储多达 4GB 的二进制数据,适用于存储图片、音频、视频等二进制文件。
sql
CREATE TABLE example_table (
binary_data_column BLOB
);
2、CLOB:存储大文本数据
用于存储大量字符数据,可存储多达 4GB 的字符数据,适用于存储较长的文本,如文章、文档等。
sql
CREATE TABLE example_table (
large_text_column CLOB
);
3、NCLOB:存储Unicode字符集的字符大对象
用于存储Unicode字符集的字符大对象数据,最大长度同样为4GB。
sql
CREATE TABLE example_table (
nclob_column NCLOB
);
存储大量的 Unicode 字符数据,类似于 CLOB,但使用国家字符集。
五、其他类型
1、RAW:存储原始二进制数据
用于存储原始二进制数据,如多媒体图像、声音等。最大长度为2000字节。
sql
CREATE TABLE example_table (
raw_data_column RAW(10)
);
存储二进制数据,最大长度为 n
字节,n
的取值范围是 1 到 2000。常用于存储加密数据或 Oracle 内部使用的数据。
2、LONG:存储超长字符串数据
用于存储超长字符串数据,最大长度为2GB。但在现代Oracle版本中,建议使用 CLOB 或 NCLOB 替代 LONG 类型。
sql
CREATE TABLE example_table (
long_column LONG
);
定义一个 LONG 类型的列,用于存储较长的字符数据,最大长度为 2GB,但使用时需要注意其性能和功能限制,因为它不支持很多字符操作函数。
3、LONG RAW:存储可变长度的二进制数据
用于存储可变长度的二进制数据,最大长度为2GB。同样在现代Oracle版本中,建议使用 BLOB 替代 LONG RAW 类型。
sql
CREATE TABLE example_table (
long_raw_column LONG RAW
);
存储二进制数据,最大长度也是 2GB,适合存储一些大型的二进制数据,但功能也比较受限,例如不支持很多二进制操作函数。
4、ROWID:用于唯一标识数据库中的行
用于唯一标识数据库中的行,是一个二进制数据类型,占用固定的10个字节。
sql
CREATE TABLE example_table (
row_id_column ROWID
);
存储数据库中行的物理地址,用于唯一标识行,长度为 18 个字节。
5、BFILE:在数据库外部存储大型二进制对象文件
用于在数据库外部存储大型二进制对象文件,最大长度为4GB。Oracle可以读取和查询BFILE,但不能直接写入。
sql
CREATE TABLE example_table (
external_file_column BFILE
);
存储指向外部文件的指针,文件存储在数据库服务器的文件系统中,而不是数据库内部。
6、BOOLEAN:布尔类型
布尔类型,用于存储真或假两种状态。
sql
CREATE TABLE example_table (
boolean_column NUMBER(1) CHECK (boolean_column IN (0, 1))
);
由于 Oracle 没有内置的 BOOLEAN 类型,使用 NUMBER(1) 并通过 CHECK 约束来模拟布尔值,其中 1 表示 TRUE,0 表示 FALSE。
7、XML:用于存储XML文档数据。
sql
CREATE TABLE example_table (
xml_column XMLTYPE
);
存储 XML 数据,使用 XMLTYPE 数据类型。
8、用户自定义类型(User Defined Type)
允许用户根据自己的需求定义新的数据类型。
六、数据类型选择的注意事项
1、字符类型
- 当数据长度固定时,使用
CHAR
。 - 当数据长度不固定时,使用
VARCHAR2
以节省空间。 - 对于大量文本数据,使用
CLOB
。
2、数值类型
- 对于整数,可使用
INTEGER
或NUMBER
。 - 对于小数,使用
NUMBER(p, s)
,根据精度需求确定p
和s
的值。
3、日期和时间类型
- 对于一般的日期和时间存储,使用
DATE
。 - 对于需要更高精度的日期和时间,使用
TIMESTAMP
。