MySQL常见数据类型详解:数值、字符串与日期时间类型

在MySQL数据库设计中,合理选择数据类型是优化存储空间、提升查询性能的关键。本文基于详细的分类表格,系统讲解MySQL中常见的数值、字符串和日期时间类型,帮助开发者快速掌握其特性及适用场景。


一、数值类型

数值类型用于存储整数、浮点数和高精度小数,具体分类如下:

类型 大小(字节) 有符号范围(SIGNED) 无符号范围(UNSIGNED) 描述 示例与备注
tinyint 1 -128 ~ 127 0 ~ 255 小整数值 age TINYINT UNSIGNED(年龄字段适用)
smallint 2 -32768 ~ 32767 0 ~ 65535 大整数值 适用于中等范围数值存储
mediumint 3 -8388608 ~ 8388607 0 ~ 16777215 大整数值 存储用户ID等较大数值
int 4 -2147483648 ~ 2147483647 0 ~ 4294967295 大整数值 通用整数类型,如id INT UNSIGNED(主键字段)
bigint 8 -263 ~ 263-1 0 ~ 264-1 极大整数值 适用于订单号、分布式ID等超大范围数值
float 4 ±3.402823466E+38 0 和 1.175494351E-38 ~ 3.402E+38 单精度浮点数 price FLOAT(5,2)(总长度5,保留2位小数)
double 8 ±1.7976931348623157E+308 0 和 2.225E-308 ~ 1.797E+308 双精度浮点数 高精度科学计算场景
decimal 可变 取决于精度和小数位定义 同左 高精度小数 salary DECIMAL(10,2)(精确存储金额)

选用原则

  1. 优先选择占用空间小的类型(如能用tinyint就不用smallint)。

  2. 无符号数值可扩展正数范围(如年龄、数量等字段)。

  3. 精确计算(如金额)必须用decimal,避免浮点数精度丢失。


二、字符串类型

字符串类型用于存储文本和二进制数据,对比分析如下:

类型 大小(字节) 描述 示例与场景 优势 劣势
char(n) 0-255(定长) 定长字符串 idcard CHAR(18)(身份证号固定18位) 查询速度快 浪费存储空间
varchar(n) 0-65535(变长) 变长字符串 username VARCHAR(50)(用户名长度可变) 节省存储空间 频繁修改可能产生碎片
tinytext 0-255 短文本字符串 存储简短描述或备注 兼容性好 效率低于varchar
text 0-65535 长文本数据 文章内容、评论等大段文本存储 支持大文本 无法直接创建索引
blob 0-65535 二进制数据(如图片) 存储文件二进制流 支持二进制格式 读写效率较低

选用原则

  1. 定长 vs 变长:字段长度固定且较短(如手机号CHAR(11))用char;长度变化较大(如地址)用varchar

  2. 文本 vs 二进制:纯文本用text,二进制数据(文件、图片)用blob

  3. 避免滥用textblob,优先使用varchar满足需求。


三、日期时间类型

日期时间类型用于存储时间信息,核心类型如下:

类型 大小(字节) 范围 格式 示例与场景
date 3 1000-01-01 ~ 9999-12-31 YYYY-MM-DD birthday DATE(出生日期)
time 3 -838:59:59 ~ 838:59:59 HH:MM:SS 记录操作耗时
datetime 8 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS create_time DATETIME(订单创建时间)
timestamp 4 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 记录数据更新时间(自动更新)
year 1 1901 ~ 2155 YYYY 存储年份信息

选用原则

  1. 需要存储年月日时分秒时用datetimetimestamp

  2. timestamp占用空间小,但范围有限(2038年问题),需注意过期风险。

  3. 自动记录更新时间可配置TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP


四、总结

  • 数值类型:根据范围选择最小类型,优先无符号,精确计算用decimal

  • 字符串类型:定长选char,变长选varchar,大文本用text

  • 日期类型:常规时间用datetime,自动更新用timestamp

合理选择数据类型不仅能节省存储空间,还能提升索引效率与查询性能。在设计表结构时,务必结合业务需求,权衡类型特性,避免过度设计。


声明:部分示例需根据实际业务调整。如有疑问,欢迎评论区交流!

你可能感兴趣的:(mysql,数据库,数据类型,后端)