当前位置: 首页 > news >正文

003MySQL最常用的数据类型详解

文章目录

前言

一、MySQL常用数据类型概览

二、整数类型(INT、TINYINT)

1. INT(标准整数)

2. TINYINT(小整数)

三、精确小数类型(DECIMAL)

四、字符串类型(VARCHAR)

五、日期时间类型(DATETIME)

六、长文本类型(TEXT)

七、补充:无符号与取值范围

1. 什么是无符号(UNSIGNED)?

2. 何时使用 UNSIGNED?

3. 为什么无符号的正数范围会扩大一倍?

总结


前言

在数据库设计与日常测试中,选择合适的字段类型至关重要。本文系统梳理了MySQL中最常用的几种数据类型,包括整数、小数、字符串、日期时间及长文本等,并结合实际业务场景说明它们的适用场景与注意事项。无论你是开发人员还是测试工程师,掌握这些基础类型都能让你更高效地处理数据验证、查询与问题排查。


一、MySQL常用数据类型概览

类型

占用空间

用途

示例

INT

4 字节

用户ID、数量

id INT UNSIGNED

TINYINT

1 字节

状态标识(0/1/2)

status TINYINT UNSIGNED

DECIMAL

变长

金额、价格

price DECIMAL(10,2)

VARCHAR

变长

用户名、手机号

username VARCHAR(20)

DATETIME

8 字节

注册时间、下单时间

created_at DATETIME

TEXT

变长

文章正文、备注

content TEXT


二、整数类型(INT、TINYINT)

1. INT(标准整数)

  • 占用4 字节
  • 有符号范围:-2147483648 ~ 2147483647
  • 无符号范围:0 ~ 4294967295
-- 有符号(默认),可存负数 id INT -- 范围:-2147483648 ~ 2147483647 -- 无符号,只能存正数,范围扩大一倍 id INT UNSIGNED -- 范围:0 ~ 4294967295

2. TINYINT(小整数)

  • 占用1 字节
  • 有符号范围:-128 ~ 127
  • 无符号范围:0 ~ 255
-- 有符号(默认),可存负数 status TINYINT -- 范围:-128 ~ 127 -- 无符号,只能存正数,范围扩大一倍 status TINYINT UNSIGNED -- 范围:0 ~ 255,常用于状态标识

典型场景:状态标识、开关字段,几乎每个表都有几个,测试时经常要查。


三、精确小数类型(DECIMAL)

DECIMAL(M,D)用于存储精确小数,其中M为总位数,D为小数位数。它按每一位数字独立存储,不存在浮点数误差

price DECIMAL(10,2) -- 共10位,小数2位,整数8位

必须使用 DECIMAL 存储金额,严禁使用 FLOAT(会有精度误差)。测试订单、金额相关功能时经常遇到该类型。


四、字符串类型(VARCHAR)

VARCHAR(N)为可变长度字符串,实际占用空间 = 实际字符数 + 1~2 字节(用于记录长度)。N表示最多可存储的字符数,中文和英文均计为 1 个字符。

username VARCHAR(20) -- 最多存20个字符

典型场景:用户名、手机号、地址等文本信息,是测试中查询最频繁的类型之一。


五、日期时间类型(DATETIME)

DATETIME占用8 字节,格式为'YYYY-MM-DD HH:MM:SS',可表示从1000-01-01 00:00:009999-12-31 23:59:59

created_at DATETIME -- 格式:'2026-06-27 14:30:00'

典型场景:订单时间、注册时间、更新时间,查数据时经常要按时间筛选。


六、长文本类型(TEXT)

TEXT用于存储不定长的大文本内容,最大长度为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 bit)

8 个 bit 可以表示 2⁸ = 256 种不同的值。

有符号(默认):拿第 1 个 bit 当“正负号”(0 代表正数,1 代表负数),剩下 7 个 bit 表示数字大小。

  • 7 个 bit 能表示 2⁷ = 128 种数值
  • 正数:0 ~ 127(128 个),负数:-1 ~ -128(128 个)
  • 总共 256 种组合,范围是-128 ~ 127

无符号(UNSIGNED):8 个 bit 全部用来表示数字大小,没有正负号。

  • 8 个 bit 能表示 2⁸ = 256 种数值
  • 范围是0 ~ 255

TINYINT 对比结果:

类型

符号位

存数值的位数

组合数

范围

有符号

占 1 位

7 位

2⁷ = 128

-128 ~ 127

无符号

不占位

8 位

2⁸ = 256

0 ~ 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 ~ 4294967295

31 bit:2^31=2,147,483,648,32 bit:2^32=4,294,967,296

同样,无符号的正数上限从 21亿 扩大到 42亿,扩大了一倍

符号把用于表示“正负号”的那 1 个 bit 省下来,全部用来存数值,相当于多了一位二进制位,数值范围因此翻倍。


总结

本文涵盖了 MySQL 开发与测试中最常用的几种数据类型:INTTINYINTDECIMALVARCHARDATETIMETEXT,并逐一说明了它们的存储空间、取值范围及典型应用场景。特别强调了DECIMAL对于金额的不可替代性,以及UNSIGNED对整数范围的影响和原理。在实际建表时,建议根据业务含义明确选择类型,并在合适的情况下使用无符号以优化存储范围,从而提升数据准确性和查询效率。

http://www.jsqmd.com/news/1128809/

相关文章:

  • Logistic Regression实战:R语言银行营销二分类建模全解析
  • Mi-Create终极指南:免费打造小米手表个性化表盘的完整教程
  • 设计模式——抽象工厂
  • [智能体-636]:AI重构生产价值:从人才红利到数字智能资产的时代更迭
  • 联合类型总解析出 null?Spring Boot 多态 GraphQL 查询的迷失与救赎
  • VLC for Android:打造跨平台全能媒体播放器的终极指南
  • 具身智能体时代,RGB 或将赢下农业 AI 终极战局
  • SSDTTime终极指南:如何用一键工具快速解决硬件兼容性问题
  • 机器学习与模式识别 第十七章 Transformers LLMs 考点压缩
  • TVA对具身智能领域“莫拉维克悖论“的挑战(11)
  • 深耕 XR 安卓底软开发:Framework 定制、渲染优化与系统稳定性实战
  • 3分钟掌握Android投屏神器:scrcpy让你的手机屏幕完美显示在电脑上
  • API网关是微服务架构中的关键组件,位于客户端与后端服务之间,承担统一入口、流量治理和安全管控等职责
  • 魔兽争霸III现代兼容性终极指南:用WarcraftHelper轻松解决闪退卡顿问题
  • 乡村的毛细血管:Nature Trace Farmscapes 2020 Vectorised 数据集
  • 基于51单片机的温度烟雾火灾报警系统—LCD1602显示,ADC0809模数转换
  • CSDN热榜预定!这篇DuckDB教程让我涨粉3000+
  • AUTOSAR VFB介绍
  • [学习方法论]掌握数据结构的长效记忆法
  • Ultralytics:解读C1模块
  • Unity Mod Manager终极指南:3步搞定Unity游戏模组安装与管理
  • TotalSegmentator:如何快速实现医学图像中117个解剖结构的自动分割?
  • OneNote专业迁移指南:终极免费工具助你无损转换到Markdown
  • TVA推动物理AI的具身智能革命(2)
  • AI基础0-人工智能的数学基础
  • Office 365中的Custom Shell详细功能介绍
  • Plone系统卸载指南:PSE2010环境下安全Unload操作详解
  • MAA明日方舟助手:5个核心功能实现游戏日常自动化终极指南
  • JavaWeb快速入门:Maven核心功能详解——标准项目结构、构建流程与依赖管理
  • Herbie:Python中的高效天气数据下载利器