MySQL、SQL Server 和 MS Access 的 SQL 数据类型

列的数据类型定义了该列可以包含的值:整数、字符、货币、日期和时间、二进制等。

SQL 数据类型

数据库表中的每一列都需要有一个名称和一个数据类型。

在创建表时,SQL 开发人员必须决定每个列中将存储什么类型的数据。数据类型是 SQL 用来理解每个列中预期的数据的类型的指南,它还确定了 SQL 如何与存储的数据交互。

注意:不同数据库中的数据类型可能具有不同的名称。即使名称相同,大小和其他细节也可能不同!请始终参阅其文档!

MySQL 数据类型(版本 8.0)

在 MySQL 中,主要有三种数据类型:字符串、数值以及日期和时间。

字符串数据类型

数据类型 描述
CHAR(size)

固定长度的字符串(可以包含字母、数字和特殊字符)。

size 参数指定了字符长度,可以从 0 到 255。默认值是 1。

VARCHAR(size)

可变长度的字符串(可以包含字母、数字和特殊字符)。

size 参数指定了最大字符串长度,可以从 0 到 65535。

BINARY(size)

与 CHAR() 相等,但存储二进制字节字符串。

size 参数指定了字节长度。默认值是 1。

VARBINARY(size)

与 VARCHAR() 相等,但存储二进制字节字符串。

size 参数指定了最大字节长度。

TINYBLOB

用于 BLOBs(Binary Large Objects,二进制大型对象)。

最大长度:255 字节。

TINYTEXT 最多可以包含 255 个字符的字符串。
TEXT(size) 最多可以包含 65,535 字节的字符串。
BLOB(size)

用于 BLOBs(Binary Large Objects,二进制大型对象)。

最多可以包含 65,535 字节的数据。

MEDIUMTEXT 最多可以包含 16,777,215 个字符的字符串。
MEDIUMBLOB

用于 BLOBs(Binary Large Objects,二进制大型对象)。

最多可以包含 16,777,215 字节的数据。

LONGTEXT 最多可以包含 4,294,967,295 个字符的字符串。
LONGBLOB

用于 BLOBs(Binary Large Objects,二进制大型对象)。

最多可以包含 4,294,967,295 字节的数据。

ENUM(val1, val2, val3, ...)

只能从指定列表中选择一个值的字符串对象。

一个 ENUM 列表中可以列出最多 65535 个值。

如果插入的值不在列表中,将插入一个空值。值按您输入的顺序排序。

SET(val1, val2, val3, ...)

可以从指定列表中选择 0 个或多个值的字符串对象。

一个 SET 列表中可以列出最多 64 个值。

数值数据类型

数据类型 描述
BIT(size)

位值类型。

每个值的位数在 size 中指定。

size 参数可以包含从 1 到 64 的值。

size 的默认值是 1。

TINYINT(size)

非常小的整数。

有符号范围是 -128 到 127。

无符号范围是 0 到 255。

size 参数指定了最大显示宽度(为 255)。

BOOL 0 被视为 false,非零值被视为 true。
BOOLEAN 等于 BOOL。
SMALLINT(size)

小整数。

有符号范围是 -32768 到 32767。

无符号范围是 0 到 65535。

size 参数指定了最大显示宽度(为 255)。

MEDIUMINT(size)

中整数。

有符号范围是 -8388608 到 8388607。

无符号范围是 0 到 16777215。

size 参数指定了最大显示宽度(为 255)。

INT(size)

中整数。

有符号范围是 -2147483648 到 2147483647。

无符号范围是 0 到 4294967295。

size 参数指定了最大显示宽度(为 255)。

INTEGER(size) 等于 INT(size)。
BIGINT(size)

大整数。

有符号范围是 -9223372036854775808 到 9223372036854775807。

无符号范围是 0 到 18446744073709551615。

size 参数指定了最大显示宽度(为 255)

FLOAT(size, d)

浮点数。

size 中指定了总位数。d 参数中指定了小数点后的位数。

此语法在 MySQL 8.0.17 中已弃用,并将在未来的 MySQL 版本中删除。

FLOAT(p)

浮点数。

MySQL 使用 p 值来确定结果数据类型是使用 FLOAT 还是 DOUBLE。

如果 p 是 0 到 24,数据类型变为 FLOAT()。

如果 p 是 25 到 53,数据类型变为 DOUBLE()。

DOUBLE(size, d)

正常大小的浮点数。

size 中指定了总位数。

d 参数中指定了小数点后的位数。

DOUBLE PRECISION(size, d)
DECIMAL(size, d)

精确的小数点固定数。

size 中指定了总位数。d 参数中指定了小数点后的位数。

size 的最大值为 65。d 的最大值为 30。

size 的默认值为 10。d 的默认值为 0。

DEC(size, d) 等于 DECIMAL(size,d)。

注意:所有数值数据类型都可能有一个额外选项:UNSIGNED 或 ZEROFILL。如果您添加 UNSIGNED 选项,MySQL 不允许该列出现负值。如果您添加 ZEROFILL 选项,MySQL 会自动将该列的属性也设置为 UNSIGNED。

日期和时间数据类型

数据类型 描述
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'。

通过在列定义中添加 DEFAULT 和 ON UPDATE 来获取自动初始化和更新到当前日期和时间。

TIMESTAMP(fsp)

时间戳。

TIMESTAMP 值存储为从 Unix epoch ('1970-01-01 00:00:00' UTC) 开始的秒数。

格式:YYYY-MM-DD hh:mm:ss。

支持的范围是 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC。

通过在列定义中使用 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 来指定自动初始化和更新到当前日期和时间。

TIME(fsp)

时间。

格式:hh:mm:ss。

支持的范围是 '-838:59:59' 到 '838:59:59'。

YEAR

四位数格式的年份。

允许的四位数格式的值:1901 到 2155,以及 0000。

MySQL 8.0 不支持两位数格式的年份。

SQL Server 数据类型

字符串数据类型

数据类型 描述 最大容量 存储
char(n) 固定宽度的字符串。 8,000 个字符。 定义的宽度。
varchar(n) 可变宽度的字符串。 8,000 个字符。 2 字节 + 字符数。
varchar(max) 可变宽度的字符串。 1,073,741,824 个字符。 2 字节 + 字符数。
text 可变宽度的字符串。 2GB 的文本数据。 4 字节 + 字符数。
nchar 固定宽度的 Unicode 字符串。 4,000 个字符。 定义的宽度 x 2。
nvarchar 可变宽度的 Unicode 字符串。 4,000 个字符。
nvarchar(max) 可变宽度的 Unicode 字符串。 536,870,912 个字符。
ntext 可变宽度 Unicode 字符串。 2GB 文本数据。
binary(n) 固定宽度二进制字符串。 8,000 字节。
varbinary 可变宽度二进制字符串。 8,000 字节。
varbinary(max) 可变宽度二进制字符串。 2GB。
image 可变宽度二进制字符串。 2GB。

数值数据类型

数据类型 描述 存储
bit 可以为 0、1 或 NULL 的整数。
tinyint 允许从 0 到 255 的整数。 1 字节。
smallint 允许介于 -32,768 和 32,767 之间的整数。 2 字节。
int 允许介于 -2,147,483,648 和 2,147,483,647 之间的整数。 4 字节。
bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的整数。 8 字节。
decimal(p,s)

固定精度和小数位数的数字。

允许介于 -10^38 +1 和 10^38 –1 之间的数字。

p 参数指示可以存储的最大总位数(小数点左侧和右侧)。p 的值必须在 1 到 38 之间。默认值为 18。

s 参数指示小数点右侧存储的最大位数。s 的值必须在 0 到 p 之间。默认值为 0。

5-17 字节。
numeric(p,s)

固定精度和小数位数的数字。

允许介于 -10^38 +1 和 10^38 –1 之间的数字。

p 参数指示可以存储的最大总位数(小数点左侧和右侧)。p 的值必须在 1 到 38 之间。默认值为 18。

s 参数指示小数点右侧存储的最大位数。s 的值必须在 0 到 p 之间。默认值为 0。

5-17 字节。
smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节。
money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节。
float(n)

介于 -1.79E + 308 和 1.79E + 308 之间的浮点精度数字数据。

n 参数指示字段是否应包含 4 或 8 字节。

float(24) 包含 4 字节字段,而 float(53) 包含 8 字节字段。

n 的默认值为 53。

4 或 8 字节。
real 介于 -3.40E + 38 和 3.40E + 38 之间的浮点精度数字数据。 4 字节。

日期和时间数据类型

数据类型 描述 存储
datetime 1753 年 1 月 1 日至 9999 年 12 月 31 日,精确到 3.33 毫秒。 8 字节。
datetime2 0001 年 1 月 1 日至 9999 年 12 月 31 日,精确到 100 纳秒。 6-8 字节。
smalldatetime 1900 年 1 月 1 日至 2079 年 6 月 6 日,精确到 1 分钟。 4 字节。
date 仅存储日期。从 0001 年 1 月 1 日至 9999 年 12 月 31 日。 3 字节。
time 仅存储时间,精确到 100 纳秒。 3-5 字节。
datetimeoffset 与 datetime2 相同,但增加了时区偏移量。 8-10 字节。
timestamp

存储一个每次创建或修改行时都会更新的唯一数字。

时间戳值基于内部时钟,并不对应实时时间。

每个表可能只有一个时间戳变量。

其他数据类型

数据类型 描述
sql_variant 存储最多 8,000 字节的各种数据类型的数据,文本、ntext 和时间戳除外。
uniqueidentifier 存储全局唯一标识符 (GUID)。
xml 存储 XML 格式化数据。最大 2GB。
cursor 存储对用于数据库操作的游标的引用。
table 存储结果集以供稍后处理。

MS Access 数据类型

数据类型 描述 存储
Text 用于文本或文本和数字组合。 最多 255 个字符。
Memo

用于大量文本。

最多可存储 65,536 个字符。

注意:您无法对 memo 字段进行排序。但是,它们是可以搜索的。

Byte 允许从 0 到 255 的整数。 1 字节。
Integer 允许介于 -32,768 和 32,767 之间的整数。 2 字节。
Long 允许介于 -2,147,483,648 和 2,147,483,647 之间的整数。 4 字节。
Single 单精度浮点数。将处理大多数小数。 4 字节。
Double 双精度浮点数。将处理大多数小数。 8 字节。
Currency

用于货币。可存放最多 15 位整数美元,加上 4 位小数。

提示:您可以选择使用哪个国家的货币。

8 字节。
AutoNumber 自动编号字段会自动为每个记录分配自己的编号,通常从 1 开始。 4 字节。
Date/Time 用于日期和时间。 8 字节。
Yes/No

逻辑字段可以显示为是/否、真/假或开/关。

在代码中,使用常量 True 和 False(相当于 -1 和 0)。

注意:在 Yes/No 字段中不允许 Null 值。

1 比特。
Ole Object 可以存储图片、音频、视频或其他 BLOBs(大二进制对象)。 最多 1GB。
Hyperlink 包含指向其他文件(包括网页)的链接。
Lookup Wizard 让您键入一个选项列表,然后可从下拉列表中选择。 4 字节。