跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL算法

MySQL 数据类型详解与应用实践

MySQL 数据类型是构建高性能数据库的基础,涉及数值、字符串、日期时间及枚举集合等分类。文章深入解析了 tinyint、bit、float、decimal 等数值类型的存储原理与精度差异,对比了 char 与 varchar 在固定长度与可变长度下的空间效率,并说明了 date、datetime、timestamp 的使用场景。同时探讨了 enum 和 set 的实现机制及查询技巧,旨在帮助开发者根据业务需求合理选型,优化存储空间与查询性能。

氛围发布于 2026/3/15更新于 2026/6/1627 浏览
MySQL 数据类型详解与应用实践

文章配图

在数据库设计中,列的数据类型选择直接决定了存储效率、查询性能以及数据的一致性。虽然库和表的操作是基础,但理解每种类型的底层机制才是构建高性能系统的关键。

MySQL 的数据类型主要分为数值型、字符串型、日期时间型以及枚举集合型。下面我们将逐一拆解这些类型的特性与选型建议。

一、数值类型

数值类型涵盖了从整数到浮点数的各种场景。其中 int 家族最为常见,而 tinyint 和 bit 则有其特定的应用场景。

1.1 Tinyint 类型

tinyint 占用 1 个字节,有符号范围是 -128 到 127。如果加上 unsigned 属性,范围则变为 0 到 255。

CREATE TABLE test_tinyint (num TINYINT);
INSERT INTO test_tinyint VALUES (-128, 127, 0);

当插入超出范围的数值时,MySQL 会直接拦截并报错。对于无符号类型:

CREATE TABLE test_unsigned (num TINYINT UNSIGNED);
INSERT INTO test_unsigned VALUES (0, 255);

超出 255 的值同样无法插入。除了 tinyint,其他 int 类型(如 smallint, mediumint, bigint)的用法类似,只是存储空间和取值范围不同。在实际开发中,如果字段值确定在一个小范围内(如状态码),优先使用 tinyint 以节省空间。

1.2 Bit 类型

bit 类型用于存储二进制位数据。定义时需要指定位数 M,默认值为 1。

CREATE TABLE test_bit (a BIT(8));
INSERT INTO test_bit VALUES (10);

这里有一个细节需要注意:bit 字段在显示时通常按 ASCII 码对应的字符输出,而不是直接显示十进制数值。例如插入 65 可能显示为 'A'。如果需要查看原始数值,可以使用 CAST() 函数转换。此外,bit 类型同样受位数限制,超出最大值会被拦截。

1.3 Float 与 Decimal

处理小数时,float 和 decimal 是最常见的选择,两者的核心区别在于精度。

Float 类型 是浮点数类型,支持参数 M 和 d。它存在精度损失问题,适合对精度要求不高的场景。

float
CREATE TABLE test_float (salary FLOAT(4,2));
INSERT INTO test_float VALUES (99.99, 100.00);

当插入数据超过指定精度时,MySQL 会进行四舍五入。如果四舍五入后仍超出范围,则会报错。float 的精度大约是 7 位有效数字。

Decimal 类型 decimal 用于存储精确的小数值,常用于金额计算。

CREATE TABLE test_decimal (price DECIMAL(10,2));
INSERT INTO test_decimal VALUES (1234567890.12);

相比 float,decimal 不会丢失精度。其最大整数位数 m 可达 65,小数位数 d 最大 30。在涉及金钱或需要严格精度的业务中,务必使用 decimal。

二、字符串类型

字符串类型主要用于文本存储,char 和 varchar 是最常用的两种。

2.1 Char 类型

char 是定长字符串。定义时指定的长度 L 单位是字符而非字节。无论实际内容多短,都会占用固定的空间。

CREATE TABLE test_char (name CHAR(2));
INSERT INTO test_char VALUES ('ab', '中国');

注意,UTF-8 编码下一个汉字占 3 个字节,但 char 的长度是按字符数计算的。char 的最大长度为 255。由于空间固定,读取速度较快,但空间利用率低。

2.2 Varchar 类型

varchar 是变长字符串,只存储实际内容和必要的长度信息。总字节数不能超过 65535,且需扣除 1~3 字节的长度记录开销。

CREATE TABLE test_varchar (desc VARCHAR(21844));

在 UTF-8 编码下,单个字符最多占 3 字节,因此 varchar(L) 中的 L 最大值约为 21844。如果编码改为 GBK,L 的最大值可提升至 32766。varchar 更节省空间,但读写效率略低于 char。

2.3 Char 与 Varchar 对比

特性CharVarchar
长度固定可变
空间浪费(未用也占)节省
效率高稍低
适用场景身份证、手机号、MD5名字、地址、描述

若数据长度完全一致,选 char;若长度变化大,选 varchar。

三、日期和时间类型

MySQL 提供了三种主要的日期时间类型:

  1. Date: 仅日期,格式 yyyy-mm-dd,占 3 字节。
  2. Datetime: 日期加时间,格式 yyyy-mm-dd HH:ii:ss,范围 1000-9999,占 8 字节。
  3. Timestamp: 时间戳,从 1970 年开始,格式同 datetime,占 4 字节。
CREATE TABLE test_time (
    t1 DATE,
    t2 DATETIME,
    t3 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

timestamp 的一个显著特点是自动更新。当记录被修改时,如果没有显式指定,它会自动更新为当前时间,非常适合记录最后修改时间。

四、Enum 和 Set

这两个类型源自 C++ 概念,分别对应枚举和集合。

Enum 只能选择一个预定义值。

CREATE TABLE user_info (gender ENUM('男', '女'));
INSERT INTO user_info VALUES ('男'), (1), (2);

输入不在列表中的值会被拦截。可以用数字索引代替字符串,但可读性较差。

Set 可以选择多个预定义值。

CREATE TABLE hobbies (hobby SET('登山', '游泳', '篮球', '武术'));
INSERT INTO hobbies VALUES ('登山,游泳');

Set 内部通过位图存储,数字代表比特位位置而非下标。查询包含特定值的记录时,建议使用 FIND_IN_SET 函数。

SELECT * FROM hobbies WHERE FIND_IN_SET('登山', hobby);

合理选择数据类型不仅能减少磁盘占用,还能提升索引效率和查询速度。在设计阶段花几分钟确认类型,往往能为后续的系统优化打下坚实基础。

目录

  1. 一、数值类型
  2. 1.1 Tinyint 类型
  3. 1.2 Bit 类型
  4. 1.3 Float 与 Decimal
  5. 二、字符串类型
  6. 2.1 Char 类型
  7. 2.2 Varchar 类型
  8. 2.3 Char 与 Varchar 对比
  9. 三、日期和时间类型
  10. 四、Enum 和 Set
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Cogito-v1-preview-llama-3B 开源模型:商业可用与自主部署
  • 复杂网络分析:社区发现算法简介
  • Cogito-v1-preview-llama-3B 高性能部署:vLLM + OpenAI 兼容 API
  • OpenAI Codex 快速入门指南:工程级 AI 编程代理
  • Python 爬虫入门教程:从零开始学习网络数据采集
  • Codex 工程级 AI 编程代理快速入门指南
  • 高校学生宿舍报修系统设计与实现
  • 什么是人工智能?AI、机器学习与深度学习的关系
  • Codex 代码生成模型简介
  • ComfyUI ControlNet 线性处理器使用场景详解
  • Codex 代码生成模型简介
  • Codex 与 Copilot:AI 编程助手的本质与区别
  • 解决 VS Code 中 GitHub Copilot 模型不可用问题
  • Codex 与 Copilot:AI 编程助手技术解析
  • 基于 CodeBuddy 与腾讯混元开发 AI 识菜通应用
  • Qclaw 使用教程:基于微信的 AI 智能体操作指南
  • 飞秋与 iptux 实现 Windows 及 Linux 内网跨平台通讯
  • 基于 CodeBuddy Code 与腾讯混元构建 AI 识菜通应用
  • 从鸿蒙初学者到生态布道者的成长历程
  • Code Llama 7B 快速上手指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online