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 不支持两位数格式的年份。 |