
文章目录前言一、MySQL常用数据类型概览二、整数类型INT、TINYINT1. INT标准整数2. TINYINT小整数三、精确小数类型DECIMAL四、字符串类型VARCHAR五、日期时间类型DATETIME六、长文本类型TEXT七、补充无符号与取值范围1. 什么是无符号UNSIGNED2. 何时使用 UNSIGNED3. 为什么无符号的正数范围会扩大一倍总结前言在数据库设计与日常测试中选择合适的字段类型至关重要。本文系统梳理了MySQL中最常用的几种数据类型包括整数、小数、字符串、日期时间及长文本等并结合实际业务场景说明它们的适用场景与注意事项。无论你是开发人员还是测试工程师掌握这些基础类型都能让你更高效地处理数据验证、查询与问题排查。一、MySQL常用数据类型概览类型占用空间用途示例INT4 字节用户ID、数量id INT UNSIGNEDTINYINT1 字节状态标识0/1/2status TINYINT UNSIGNEDDECIMAL变长金额、价格price DECIMAL(10,2)VARCHAR变长用户名、手机号username VARCHAR(20)DATETIME8 字节注册时间、下单时间created_at DATETIMETEXT变长文章正文、备注content TEXT二、整数类型INT、TINYINT1. INT标准整数占用4 字节有符号范围-2147483648 ~ 2147483647无符号范围0 ~ 4294967295-- 有符号默认可存负数 id INT -- 范围-2147483648 ~ 2147483647 -- 无符号只能存正数范围扩大一倍 id INT UNSIGNED -- 范围0 ~ 42949672952. TINYINT小整数占用1 字节有符号范围-128 ~ 127无符号范围0 ~ 255-- 有符号默认可存负数 status TINYINT -- 范围-128 ~ 127 -- 无符号只能存正数范围扩大一倍 status TINYINT UNSIGNED -- 范围0 ~ 255常用于状态标识典型场景状态标识、开关字段几乎每个表都有几个测试时经常要查。三、精确小数类型DECIMALDECIMAL(M,D)用于存储精确小数其中M为总位数D为小数位数。它按每一位数字独立存储不存在浮点数误差。price DECIMAL(10,2) -- 共10位小数2位整数8位必须使用 DECIMAL 存储金额严禁使用 FLOAT会有精度误差。测试订单、金额相关功能时经常遇到该类型。四、字符串类型VARCHARVARCHAR(N)为可变长度字符串实际占用空间 实际字符数 1~2 字节用于记录长度。N表示最多可存储的字符数中文和英文均计为 1 个字符。username VARCHAR(20) -- 最多存20个字符典型场景用户名、手机号、地址等文本信息是测试中查询最频繁的类型之一。五、日期时间类型DATETIMEDATETIME占用8 字节格式为YYYY-MM-DD HH:MM:SS可表示从1000-01-01 00:00:00到9999-12-31 23:59:59。created_at DATETIME -- 格式2026-06-27 14:30:00典型场景订单时间、注册时间、更新时间查数据时经常要按时间筛选。六、长文本类型TEXTTEXT用于存储不定长的大文本内容最大长度为65535 字节约 64 KB。实际占用空间随内容动态变化。content TEXT -- 存储文章正文、备注等不定长内容典型场景文章内容、备注说明测试中较少直接查询但验证数据完整性时会用到。七、补充无符号与取值范围1. 什么是无符号UNSIGNED默认情况下整数类型为有符号可以存储负数。加上UNSIGNED关键字后该字段只能存储非负数且正数范围扩大一倍。-- TINYINT 示例1字节 age TINYINT -- 可存 -128 ~ 127 age TINYINT UNSIGNED -- 可存 0 ~ 255 -- INT 示例4字节 id INT -- 可存 -21亿 ~ 21亿 id INT UNSIGNED -- 可存 0 ~ 42亿2. 何时使用 UNSIGNED建议加年龄、数量、ID等不可能为负数的字段。不建议加温度、资金等可能需要负数的字段。3. 为什么无符号的正数范围会扩大一倍这要从计算机如何存储数字说起。1比特bit与字节Byte计算机存储数据的最小单位是bit比特一个 bit 只能存两种状态0 或 1就像一个开关——要么关0要么开1。1 个字节 8 个 bit这是计算机处理数据的基本单位。2以 TINYINT 为例1字节 8 bit8 个 bit 可以表示 2⁸ 256 种不同的值。有符号默认拿第 1 个 bit 当“正负号”0 代表正数1 代表负数剩下 7 个 bit 表示数字大小。7 个 bit 能表示 2⁷ 128 种数值正数0 ~ 127128 个负数-1 ~ -128128 个总共 256 种组合范围是-128 ~ 127无符号UNSIGNED8 个 bit 全部用来表示数字大小没有正负号。8 个 bit 能表示 2⁸ 256 种数值范围是0 ~ 255TINYINT 对比结果类型符号位存数值的位数组合数范围有符号占 1 位7 位2⁷ 128-128 ~ 127无符号不占位8 位2⁸ 2560 ~ 255无符号省去了“正负号”占用的 1 个 bit把省下来的 bit 用于存数值相当于多了一位二进制数。二进制中每多一位数值范围就翻一倍二进制多 1 位就乘以 2¹ 2十进制多 1 位就乘以10¹ 10十进制多 2 位就乘以10² 100所以无符号的正数上限从 127 扩大到 255正好扩大了一倍。3 INT 同理4字节 32 bit类型存数值的位数组合数范围有符号31 位2³¹ 21亿-2147483648 ~ 2147483647无符号32 位2³² 42亿0 ~ 429496729531 bit2^312,147,483,64832 bit2^324,294,967,296同样无符号的正数上限从 21亿 扩大到 42亿扩大了一倍。符号把用于表示“正负号”的那 1 个 bit 省下来全部用来存数值相当于多了一位二进制位数值范围因此翻倍。总结本文涵盖了 MySQL 开发与测试中最常用的几种数据类型INT、TINYINT、DECIMAL、VARCHAR、DATETIME和TEXT并逐一说明了它们的存储空间、取值范围及典型应用场景。特别强调了DECIMAL对于金额的不可替代性以及UNSIGNED对整数范围的影响和原理。在实际建表时建议根据业务含义明确选择类型并在合适的情况下使用无符号以优化存储范围从而提升数据准确性和查询效率。