MySQL 数据类型

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

MySQL 数据类型 (Version 8.0)

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

SQL 开发人员在创建表时必须决定每列中存储的数据类型。数据类型是 SQL 理解每列中期望的数据类型的指南,它还标识 SQL 将如何与存储的数据交互。

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

字符串数据类型

数据类型 描述
CHAR(size)

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

size 参数指定列长度(以字符为单位)- 可以是从 0 到 255。默认值为 1。

VARCHAR(size)

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

size 参数指定最大列长度(以字符为单位) - 可以是从 0 到 65535。

BINARY(size)

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

size 参数指定列长度(以字节为单位)。默认值为 1。

VARBINARY(size)

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

size 参数指定最大列长度(以字节为单位)。

TINYBLOB 用于 BLOB(二进制大对象)。最大长度:255 字节。
TINYTEXT 保存最大长度为 255 个字符的字符串。
TEXT(size) 保存最大长度为 65,535 字节的字符串。
BLOB(size)

用于 BLOB(二进制大对象)。

最多可容纳 65,535 字节的数据。

MEDIUMTEXT 保存最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB

用于 BLOB(二进制大对象)。

最多可容纳 16,777,215 字节的数据。

LONGTEXT 存储最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB

用于 BLOB(二进制大对象)。

最多可容纳 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 零被视为 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 纪元('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 不支持两位数格式的年份。