SQL 数据类型
数据类型用于表示可以存储在数据库表中的数据的性质。例如,在表的特定列中,如果我们想存储字符串类型的数据,则必须声明该列的字符串数据类型。
数据类型主要分为三类,适用于每个数据库。
- 字符串数据类型
- 数值数据类型
- 日期和时间数据类型
MySQL、SQL Server和Oracle数据库中的数据类型
MySQL数据类型
MySQL数据库中使用的数据类型列表。这是基于MySQL 8.0版本的。
MySQL字符串数据类型
CHAR(Size) | 用于指定一个固定长度的字符串,可以包含数字、字母和特殊字符。其大小可以为0到255个字符。默认为1。 |
---|---|
VARCHAR(Size) | 用于指定一个可变长度的字符串,可以包含数字、字母和特殊字符。其大小可以为0到65535个字符。 |
BINARY(Size) | 等同于CHAR(),但存储二进制字节字符串。它的大小参数指定列长度(以字节为单位)。默认为1。 |
VARBINARY(Size) | 等同于VARCHAR(),但存储二进制字节字符串。它的大小参数指定列的最大长度(以字节为单位)。 |
TEXT(Size) | 保存一个最大长度为255个字符的字符串。 |
TINYTEXT | 保存一个最大长度为255个字符的字符串。 |
MEDIUMTEXT | 保存一个最大长度为16,777,215个字符的字符串。 |
LONGTEXT | 保存一个最大长度为4,294,967,295个字符的字符串。 |
ENUM(val1, val2, val3,…) | 用于表示只有一个值的字符串对象,该值必须从可能的值列表中选择。ENUM列表中最多可以包含65535个值。如果插入一个不在列表中的值,将插入一个空值。 |
SET( val1,val2,val3,….) | 用于指定一个可以包含0个或多个值的字符串,这些值必须从可能的值列表中选择。在SET列表中一次最多可以列出64个值。 |
BLOB(size) | 用于存储BLOBs(二进制大型对象)。它可以保存最多65,535个字节。 |
MySQL 数字数据类型
BIT(大小) | 用于位值类型。每个值的位数在大小中指定。大小可以为1到64。默认值为1。 |
---|---|
INT(大小) | 用于整数值。其有符号范围从-2147483648到2147483647,无符号范围从0到4294967295。大小参数指定了最大显示宽度为255。 |
INTEGER(大小) | 等同于INT(大小)。 |
FLOAT(大小, d) | 用于指定浮点数。大小参数指定了总位数。小数点后的位数由d参数指定。 |
FLOAT(p) | 用于指定浮点数。MySQL使用p参数来确定是否使用FLOAT或DOUBLE。如果p在0到24之间,数据类型变为FLOAT()。如果p在25到53之间,数据类型变为DOUBLE()。 |
DOUBLE(大小, d) | 一个普通大小的浮点数。大小参数指定了总位数。小数点后的位数由d参数指定。 |
DECIMAL(大小, d) | 用于指定定点数。大小参数指定了总位数。小数点后的位数由d参数指定。大小的最大值为65,默认值为10。d的最大值为30,默认值为0。 |
DEC(大小, d) | 等同于DECIMAL(大小, d)。 |
BOOL | 用于指定布尔值true和false。零被视为false,非零值被视为true。 |
MySQL日期和时间数据类型
DATE | 它用于指定日期格式为YYYY-MM-DD。支持的范围从’1000-01-01’到’9999-12-31’。 |
---|---|
DATETIME(fsp) | 它用于指定日期和时间的组合。其格式为YYYY-MM-DD hh:mm:ss。支持的范围从’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。 |
TIMESTAMP(fsp) | 它用于指定时间戳。其值存储为自Unix纪元(‘1970-01-01 00:00:00’ UTC)以来的秒数。其格式为YYYY-MM-DD hh:mm:ss。支持的范围从UTC时区的’1970-01-01 00:00:01’到’2038-01-09 03:14:07’。 |
TIME(fsp) | 它用于指定时间格式为hh:mm:ss。支持的范围从’-838:59:59’到’838:59:59’。 |
YEAR | 它用于指定四位数格式的年份。允许的值为四位数范围从1901到2155,以及0000。 |
SQL Server数据类型
SQL Server字符串数据类型
char(n) | 这是一个固定宽度的字符字符串数据类型。其大小可达到8000个字符。 |
---|---|
varchar(n) | 这是一个可变宽度的字符字符串数据类型。其大小可达到8000个字符。 |
varchar(max) | 这是一个可变宽度的字符字符串数据类型。其大小可达到1,073,741,824个字符。 |
text | 这是一个可变宽度的字符字符串数据类型。其大小可达到2GB的文本数据。 |
nchar | 这是一个固定宽度的Unicode字符串数据类型。其大小可达到4000个字符。 |
nvarchar | 这是一个可变宽度的Unicode字符串数据类型。其大小可达到4000个字符。 |
ntext | 这是一个可变宽度的Unicode字符串数据类型。其大小可达到2GB的文本数据。 |
binary(n) | 这是一个固定宽度的二进制字符串数据类型。其大小可达到8000个字节。 |
varbinary | 这是一个可变宽度的二进制字符串数据类型。其大小可达到8000个字节。 |
image | 这也是一个可变宽度的二进制字符串数据类型。其大小可达到2GB。 |
SQL Server 数值数据类型
bit | 这是一个可以是0、1或空的整数。 |
---|---|
tinyint | 允许的整数范围是0到255。 |
Smallint | 允许的整数范围是-32,768到32,767。 |
Int | 允许的整数范围是-2,147,483,648到2,147,483,647。 |
bigint | 允许的整数范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807。 |
float(n) | 用于指定浮点精度数值数据范围为-1.79E+308到1.79E+308。参数n指示字段是否应保持4字节或8字节,默认值为53。 |
real | 浮点精度数值数据范围为-3.40E+38到3.40E+38。 |
money | 用于指定货币数据范围为-922,337,233,685,477.5808到922,337,203,685,477.5807。 |
SQL Server日期和时间数据类型
datetime | 它用于指定日期和时间的组合。精度为3.33毫秒,支持范围从1753年1月1日到9999年12月31日。 |
---|---|
datetime2 | 它用于指定日期和时间的组合。精度为100纳秒,支持范围从0001年1月1日到9999年12月31日。 |
date | 它仅用于存储日期。支持范围从0001年1月1日到9999年12月31日。 |
time | 它仅存储时间,精度为100纳秒。 |
timestamp | 它在创建或修改新行时存储一个唯一的数字。时间戳的值基于内部时钟,而不对应真实时间。每个表中只能包含一个时间戳变量。 |
SQL Server其他数据类型
Sql_variant | 用于除文本、时间戳和ntext以外的各种数据类型。它可以存储最多8000字节的数据。 |
---|---|
XML | 用于存储XML格式的数据。最大容量为2GB。 |
cursor | 用于存储用于数据库操作的游标的引用。 |
table | 用于存储用于后续处理的结果集。 |
uniqueidentifier | 用于存储GUID(全局唯一标识符)。 |
Oracle 数据类型
Oracle 字符串数据类型
CHAR(size) | 用于存储预定长度内的字符数据。可存储最多2000个字节。 |
---|---|
NCHAR(size) | 用于存储预定长度内的国家字符数据。可存储最多2000个字节。 |
VARCHAR2(size) | 用于存储预定长度内的可变字符串数据。可存储最多4000个字节。 |
VARCHAR(SIZE) | 与VARCHAR2(size)相同。也可以使用VARCHAR(size),但建议使用VARCHAR2(size)。 |
NVARCHAR2(size) | 用于存储预定长度内的Unicode字符串数据。必须指定NVARCHAR2数据类型的大小。可存储最多4000个字节。 |
Oracle数字数据类型
NUMBER(p, s) | 它包含了精度p和标度s。精度p的范围是从1到38,标度s的范围是从-84到127。 |
---|---|
FLOAT(p) | 它是NUMBER数据类型的一个子类型。精度p的范围是从1到126。 |
BINARY_FLOAT | 它用于二进制精度(32位)。它需要5个字节,包括长度字节。 |
BINARY_DOUBLE | 它用于双精度二进制(64位)。它需要9个字节,包括长度字节。 |
Oracle 日期和时间数据类型
日期(DATE) | 它用于存储具有固定长度的有效日期时间格式。其范围从公元前4712年1月1日到公元9999年12月31日。 |
---|---|
时间戳(TIMESTAMP) | 它用于以YYYY-MM-DD和hh:mm:ss格式存储有效日期。 |
Oracle大型对象数据类型(LOB类型)
BLOB | 它用于指定非结构化的二进制数据。其范围达到2 32 -1字节或4 GB。 |
---|---|
BFILE | 它用于将二进制数据存储在外部文件中。其范围达到2 32 -1字节或4 GB。 |
CLOB | 它用于单字节字符数据。其范围达到2 32 -1字节或4 GB。 |
NCLOB | 它用于指定单字节或固定长度多字节国家字符集(NCHAR)数据。它的范围达到2 32 -1字节或4 GB。 |
RAW(size) | 它用于指定可变长度的原始二进制数据。每行的范围是多达2000字节。必须指定其最大大小。 |
LONG RAW | 它用于指定可变长度的原始二进制数据。其范围为2 31 -1字节或2 GB,每行。 |