MySQL 数据类型有哪几种?(超详细)
MySQL 数据类型是指用于在 MySQL 数据库中存储数据的不同类型。在 MySQL 中,数据类型用于指定表中每个列存储的数据类型。下面将介绍 MySQL 中常见的数据类型。
数值类型
MySQL 支持整数类型、浮点类型、定点类型等数值类型。
-
整数类型
MySQL 支持多种整数类型,包括
TINYINT
、SMALLINT
、MEDIUMINT
、INT
、BIGINT
等。这些类型的区别在于它们所占用的存储空间和可存储的数值范围不同。例如,TINYINT
类型占用 1 个字节,可存储范围为 -128 ~ 127,而BIGINT
类型占用 8 个字节,可存储范围为 -2^63 ~ 2^63-1。 -
浮点类型
MySQL 支持
FLOAT
和DOUBLE
两种浮点类型。它们分别用于存储单精度浮点数和双精度浮点数。例如,FLOAT
类型占用 4 个字节,可存储 7 位有效数字,而DOUBLE
类型占用 8 个字节,可存储 15 位有效数字。 -
定点类型
MySQL 支持
DECIMAL
和NUMERIC
两种定点类型。这些类型用于存储精确的小数值,比如货币金额。这些类型需要指定精度和刻度。例如,DECIMAL(10,2)
表示一个最大值为 99999999.99、最小值为 -99999999.99 的定点数,其中 10 表示精度,2 表示刻度。
字符串类型
MySQL 支持多种字符串类型,包括 CHAR
、VARCHAR
、BINARY
、VARBINARY
、TEXT
、BLOB
等。
-
CHAR
CHAR
类型用于存储固定长度的字符串。例如,CHAR(10)
表示一个长度为 10 的字符串。 -
VARCHAR
VARCHAR
类型用于存储可变长度的字符串。例如,VARCHAR(10)
表示一个最大长度为 10 的字符串。 -
BINARY
BINARY
类型用于存储固定长度的二进制数据。 -
VARBINARY
VARBINARY
类型用于存储可变长度的二进制数据。 -
TEXT
TEXT
类型用于存储长文本字符串,可以存储最大长度为 65,535 个字符。 -
BLOB
BLOB
类型用于存储二进制大对象(Binary Large Object),可以存储最大长度为 65,535 个字节。
日期和时间类型
MySQL 中常用的日期和时间类型有:
- DATE:表示日期,格式为“YYYY-MM-DD”,范围从“1000-01-01”到“9999-12-31”。
- TIME:表示时间,格式为“HH:MM:SS”,范围从“-838:59:59”到“838:59:59”。
- DATETIME:表示日期和时间,格式为“YYYY-MM-DD HH:MM:SS”,范围从“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。
- TIMESTAMP:与 DATETIME 类型相同,但范围是从“1970-01-01 00:00:01”UTC 到“2038-01-19 03:14:07”UTC,且存储时占用的空间比 DATETIME 小。
- YEAR:表示年份,格式为“YYYY”或“YY”,范围从“1901”到“2155”。
示例代码:
CREATE TABLE `datetime_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_col` date NOT NULL,
`time_col` time NOT NULL,
`datetime_col` datetime NOT NULL,
`timestamp_col` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`year_col` year(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
以上代码创建了一个名为 datetime_test
的表,其中包含了 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 类型的列。在实际的应用中,根据需求选择合适的日期和时间类型,有助于提高数据库的存储效率和查询性能。
特殊的数据类型
除了上述提到的数据类型,MySQL 还支持以下一些特殊的数据类型:
ENUM
枚举类型:ENUM表示只能在指定的值列表中进行选择,最多可以有65535个不同的值,但是如果用字符串类型来存储,这会占用很大的空间,所以使用ENUM可以减少存储空间。
CREATE TABLE fruit (
id INT(11) NOT NULL AUTO_INCREMENT,
name ENUM('apple', 'banana', 'orange') NOT NULL,
PRIMARY KEY (id)
);
SET
集合类型:SET 可以存储零个或多个集合成员,每个成员占据一个 32 位的二进制位,集合的最大成员数是 64,SET 类型的列存储为一个整型数,这个整型数在存储时会被转化为二进制数,每一位代表一个集合成员,如果某一位上的值为 1,表示该成员包含在集合中,否则不包含。
CREATE TABLE person (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender SET('M', 'F') NOT NULL,
PRIMARY KEY (id)
);
JSON
JSON 类型:MySQL 5.7 之后支持 JSON 类型,可以方便地存储和查询 JSON 数据。JSON 类型支持所有的 JSON 数据类型,包括对象、数组、字符串、数字、布尔值和 null。
CREATE TABLE student (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
info JSON NOT NULL,
PRIMARY KEY (id)
);
Spatial
空间数据类型:MySQL 支持存储和操作二维和三维空间数据的数据类型,包括点、线、面和几何体等。
CREATE TABLE city (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
location POINT NOT NULL,
PRIMARY KEY (id),
SPATIAL INDEX (location)
);
除了以上这些,MySQL 还支持其他一些特殊的数据类型,如 Geometry 等。