# MySQL数据类型详解
## 数值类型
### 整数类型
– **TINYINT**: 1字节,范围 -128 到 127,无符号 0 到 255
– **SMALLINT**: 2字节,范围 -32768 到 32767,无符号 0 到 65535
– **MEDIUMINT**: 3字节,范围 -8388608 到 8388607,无符号 0 到 16777215
– **INT/INTEGER**: 4字节,范围 -2147483648 到 2147483647,无符号 0 到 4294967295
– **BIGINT**: 8字节,范围 -9223372036854775808 到 9223372036854775807,无符号 0 到 18446744073709551615
### 浮点类型
– **FLOAT**: 4字节,单精度浮点数,精度约7位
– **DOUBLE**: 8字节,双精度浮点数,精度约15位
– **DECIMAL(M,D)**: 可变长度,M为总位数,D为小数位数,精确数值类型
## 字符串类型
### 定长字符串
– **CHAR(M)**: 固定长度,M最大为255
### 变长字符串
– **VARCHAR(M)**: 可变长度,M最大为65535
– **TEXT**: 最大长度65535字节
– **MEDIUMTEXT**: 最大长度16777215字节
– **LONGTEXT**: 最大长度4294967295字节
### 二进制类型
– **BINARY(M)**: 固定长度二进制数据
– **VARBINARY(M)**: 可变长度二进制数据
– **BLOB**: 二进制大对象,最大65535字节
– **MEDIUMBLOB**: 最大16777215字节
– **LONGBLOB**: 最大4294967295字节
## 日期时间类型
– **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 UTC 到 2038-01-19 03:14:07 UTC
– **YEAR**: 年份,格式 YYYY,范围 1901 到 2155
## 其他类型
– **ENUM**: 枚举类型,最多65535个值
– **SET**: 集合类型,最多64个值
– **JSON**: JSON数据类型,存储JSON格式数据
– **GEOMETRY**: 空间数据类型
## 数据类型选择建议
1. 选择最小的可用数据类型以节省空间
2. 对于整数,根据实际范围选择合适的类型
3. 对于字符串,根据实际长度选择CHAR或VARCHAR
4. 对于精确数值,使用DECIMAL而不是FLOAT/DOUBLE
5. 对于日期时间,根据需要选择DATE、TIME、DATETIME或TIMESTAMP
6. 对于复杂数据结构,考虑使用JSON类型
## 最佳实践
– 为经常查询的字段选择合适的数据类型
– 避免使用TEXT和BLOB类型存储频繁查询的数据
– 使用TIMESTAMP存储需要自动更新的时间戳
– 对于枚举值,考虑使用ENUM类型以提高查询效率
– 对于JSON数据,合理设计结构以充分利用JSON函数