MySQL数据类型详解
MySQL 支持丰富的数据类型,主要分为三大类:数值类型、日期和时间类型、字符串类型。此外,还有空间类型和 JSON 类型等。
以下是详细的分类和说明:
一、数值类型
1. 整数类型
| 类型 | 字节 | 有符号范围 | 无符号范围 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
| INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
| BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |
2. 浮点数类型
| 类型 | 字节 | 说明 |
|---|---|---|
| FLOAT | 4 | 单精度浮点数 |
| DOUBLE | 8 | 双精度浮点数 |
3. 定点数类型
| 类型 | 说明 |
|---|---|
| DECIMAL(M,D) | 精确小数,M为总位数,D为小数位数 |
二、日期和时间类型
| 类型 | 格式 | 范围 | 说明 |
|---|---|---|---|
| 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 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 | 时间戳 |
| YEAR | YYYY | 1901 ~ 2155 | 年份值 |
三、字符串类型
1. 文本字符串
| 类型 | 最大长度 | 说明 |
|---|---|---|
| CHAR | 0-255字符 | 定长字符串 |
| VARCHAR | 0-65535字符 | 变长字符串 |
| TINYTEXT | 255字符 | 短文本字符串 |
| TEXT | 65535字符 | 长文本数据 |
| MEDIUMTEXT | 16777215字符 | 中等长度文本 |
| LONGTEXT | 4294967295字符 | 极大文本数据 |
2. 二进制字符串
| 类型 | 最大长度 | 说明 |
|---|---|---|
| BINARY | 0-255字节 | 定长二进制字符串 |
| VARBINARY | 0-65535字节 | 变长二进制字符串 |
| TINYBLOB | 255字节 | 短二进制数据 |
| BLOB | 65535字节 | 二进制长文本数据 |
| MEDIUMBLOB | 16777215字节 | 中等长度二进制数据 |
| LONGBLOB | 4294967295字节 | 极大二进制数据 |
四、其他类型
1. 枚举类型
sql
ENUM('value1', 'value2', ...) # 枚举值列表
2. 集合类型
sql
SET('value1', 'value2', ...) # 字符串对象集合
3. JSON 类型
sql
JSON # 存储 JSON 格式数据(MySQL 5.7.8+)
4. 空间数据类型
-
GEOMETRY
-
POINT
-
LINESTRING
-
POLYGON
-
等
五、数据类型选择建议
-
整数类型:根据数据范围选择合适的大小
-
小数类型:需要精确计算时用 DECIMAL,科学计算用 FLOAT/DOUBLE
-
字符串类型:定长用 CHAR,变长用 VARCHAR
-
日期时间:DATETIME 范围更大,TIMESTAMP 带时区转换
-
大文本:TEXT 用于文本,BLOB 用于二进制数据
示例用法
sql
CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age TINYINT UNSIGNED,salary DECIMAL(10,2),birth_date DATE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,status ENUM('active', 'inactive'),preferences JSON
);
选择合适的数据类型对数据库性能和存储效率至关重要
