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 | 用于 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 | 零被视为假,非零值被视为真。 |
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 不支持两位数格式的年份。 |