mysql数据类型
MySQL 数据库支持丰富的数据类型,以下是其核心数据类型的全面归纳,涵盖存储范围、用途及关键特性:
一、数值类型
整数类型
• TINYINT:1字节,范围:有符号(-128~127),无符号(0~255),适用于年龄、状态码等小范围数值。• SMALLINT:2字节,范围:有符号(-32768~32767),无符号(0~65535),适用于省份编号等中等范围数值。
• MEDIUMINT:3字节,范围:有符号(-8,388,608~8,388,607),无符号(0~16,777,215),适用于订单流水号等。
• INT/INTEGER:4字节,范围:有符号(-2,147,483,648~2,147,483,647),无符号(0~4,294,967,295),最常用的整数类型。
• BIGINT:8字节,范围:有符号(-9,223,372,036,854,775,808~9,223,372,036,854,775,807),无符号(0~18446744073709551615),适用于大型ID或计数器。
浮点数与定点数
• FLOAT:单精度浮点型,4字节,近似值存储,适用于科学计算等非精确场景。• DOUBLE:双精度浮点型,8字节,精度更高,但仍有精度损失。
• DECIMAL:定点数类型,精确存储小数,格式为
DECIMAL(M,D)
,如金融金额等需高精度计算的场景。位与布尔类型
• BIT(M):存储位数据,M范围1~64,如开关状态。• BOOL/BOOLEAN:等价于TINYINT(1),0表示FALSE,非0表示TRUE。
二、日期与时间类型
- 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:时间戳,范围
1970-01-01 00:00:01 UTC
至2038-01-19 03:14:07 UTC
,支持自动更新(如插入或修改时自动填充当前时间)。 - YEAR:存储年份,支持2位或4位格式(1901~2155)。
三、字符串与文本类型
定长与变长字符串
• CHAR(M):定长字符串,最多255字符,适合存储固定长度数据(如MD5哈希)。• VARCHAR(M):变长字符串,最多65535字节(实际字符数受编码影响),适合存储可变长度数据(如用户名)。
文本类型
• TINYTEXT:最大255字符,适用于短文。• TEXT:最大65,535字符,适用于文章内容。
• MEDIUMTEXT:最大16,777,215字符,适用于长文本。
• LONGTEXT:最大4,294,967,295字符,适用于超长文本(如日志)。
二进制字符串
• BINARY(M):定长二进制数据,类似CHAR。• VARBINARY(M):变长二进制数据,类似VARCHAR。
• BLOB系列:包括TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB,存储二进制文件(如图片、视频)。
四、枚举与集合类型
- ENUM:单选枚举类型,如性别字段
ENUM('male', 'female')
,存储时实际为整数索引。 - SET:多选集合类型,如兴趣爱好
SET('sports', 'music')
,允许选择多个值(最多64个选项)。
五、其他特殊类型
- JSON:存储JSON格式数据,支持JSON路径查询与函数操作。
- 空间数据类型:如GEOMETRY、POINT、POLYGON等,用于地理信息系统(GIS)。
- UUID:存储128位唯一标识符(需通过函数生成)。
六、属性与约束 • UNSIGNED:数值类型无符号化,扩大正数范围。
• AUTO_INCREMENT:自增属性,常用于主键。
• DEFAULT:设置默认值。
• NOT NULL:禁止NULL值。
七、选型建议
- 性能与存储平衡:优先选择最小适用类型(如用TINYINT代替INT存储状态码)。
- 精确性要求:金融数据用DECIMAL,避免浮点数精度损失。
- 空间优化:定长字段(CHAR/BINARY)查询更快,变长字段(VARCHAR/TEXT)节省空间。
- 时间类型选择:需时区支持时用TIMESTAMP,否则用DATETIME。
如需完整示例或特定场景的详细对比,可参考MySQL官方文档 (opens new window)或上述搜索结果。