MySQL 数据类型
列的数据类型定义了该列可以容纳的值:整数、字符、货币、日期和时间、二进制等等。
MySQL 数据类型(版本 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 | 用于 BLOBs(二进制大对象)。最大长度:255 字节。 |
TINYTEXT | 存储最大长度为 255 个字符的字符串。 |
TEXT(size) | 存储最大长度为 65,535 字节的字符串。 |
BLOB(size) | 用于 BLOBs(二进制大对象)。存储最多 65,535 字节的数据。 |
MEDIUMTEXT | 存储最大长度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB | 用于 BLOBs(二进制大对象)。存储最多 16,777,215 字节的数据。 |
LONGTEXT | 存储最大长度为 4,294,967,295 个字符的字符串。 |
LONGBLOB | 用于 BLOBs(二进制大对象)。存储最多 4,294,967,295 字节的数据。 |
ENUM(val1, val2, val3, ...) | 一种字符串对象,只能包含一个值,该值是从可能值列表中选择的。您可以在 ENUM 列表中列出最多 65,535 个值。如果插入了不在列表中的值,则会插入一个空值。值按您输入的顺序排序。 |
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 不支持两位数格式的年份。 |