首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 数据类型详解:字符串、数字、日期

MySQL 数据类型详解:字符串、数字、日期

作者头像
每周聚焦
发布2025-07-04 15:15:53
发布2025-07-04 15:15:53
20000
代码可运行
举报
运行总次数:0
代码可运行

在 MySQL 中,选择合适的[数据类型]对于数据库的存储效率查询性能至关重要。MySQL 提供了**字符串(String)、数字(Numeric)和日期(Date & Time)**三大类数据类型,每种类型又有不同的子类型,以适应不同的业务需求。


1. 字符串(String)数据类型

[字符串类型]用于存储文本数据,主要分为定长(CHAR)和变长(VARCHAR) ,以及大文本(TEXT 和 BLOB)

1.1 定长与变长字符串

数据类型

存储方式

特点

适用场景

CHAR(n)

定长存储(不足补空格)

访问速度快,占用空间固定

适用于固定长度的数据,如国家代码、身份证号

VARCHAR(n)

变长存储(按需分配空间)

节省存储空间,但查询时可能需要额外的存储开销

适用于长度不固定的文本,如用户昵称、电子邮件

CHAR vs. VARCHAR
  • CHAR(10) 始终占用 10 个字节(不足补空格)。
  • VARCHAR(10) 只存储实际字符,最多 10 个字节,并额外占用 1-2 字节用于存储长度信息。

一般来说:

  • 短小、长度固定的文本(如国家代码、MD5 哈希)用 CHAR
  • 长度不固定的文本(如姓名、地址)用 VARCHAR
1.2 TEXT 和 BLOB

当存储较长的文本或二进制数据时,使用 TEXT 和 BLOB 类型:

数据类型

最大存储大小

是否区分大小写

适用场景

TINYTEXT

255 字节

✅ 区分大小写

短文本,如推文内容

TEXT

65,535 字节(64KB)

✅ 区分大小写

文章内容、评论

MEDIUMTEXT

16,777,215 字节(16MB)

✅ 区分大小写

书籍、日志记录

LONGTEXT

4GB

✅ 区分大小写

超长文本,如百科条目

TINYBLOB

255 字节

❌ 不区分大小写

小二进制数据,如图片缩略图

BLOB

64KB

❌ 不区分大小写

图片、音频

MEDIUMBLOB

16MB

❌ 不区分大小写

大型媒体文件

LONGBLOB

4GB

❌ 不区分大小写

超大文件,如电影

TEXT vs. VARCHAR
  • TEXT 不支持 默认值,也无法使用 索引(仅支持前缀索引) ,但可以存储大量文本。
  • VARCHAR 可以索引整个字段,适用于需要频繁搜索的文本字段。

2. 数字(Numeric)数据类型

数字类型用于存储整数或小数,主要分为整数类型浮点/定点类型

2.1 整数类型

数据类型

存储大小

取值范围(无符号)

适用场景

TINYINT

1 字节

0 ~ 255

布尔值(0/1)、评分

SMALLINT

2 字节

0 ~ 65,535

小范围数值,如年龄

MEDIUMINT

3 字节

0 ~ 16,777,215

适用于 ID、自增字段

INT(INTEGER)

4 字节

0 ~ 4,294,967,295

适用于大部分场景,如用户 ID

BIGINT

8 字节

0 ~ 18,446,744,073,709,551,615

适用于超大数值,如银行账户余额

无符号(UNSIGNED) vs. 有符号

  • 默认情况下整数是有符号的(即支持负数)。
  • UNSIGNED 关键字可以使整数仅存储非负数,从而扩大可用范围。 sql 体验AI代码助手 代码解读复制代码CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY ); AI写代码sql 123
2.2 浮点与定点类型

数据类型

存储大小

适用场景

FLOAT(M, D)

4 字节

适用于非严格精度的计算,如游戏评分

DOUBLE(M, D)

8 字节

高精度计算,如科学计算

DECIMAL(M, D)(NUMERIC)

可变

财务计算,避免精度丢失

FLOAT vs. DECIMAL
  • FLOAT/DOUBLE 使用二进制存储,可能导致精度误差: sql 体验AI代码助手 代码解读复制代码SELECT 0.1 + 0.2; -- 结果可能不是 0.3 AI写代码sql 1
  • DECIMAL 采用字符串存储,不会丢失精度: sql 体验AI代码助手 代码解读复制代码CREATE TABLE transactions ( amount DECIMAL(10,2) NOT NULL ); AI写代码sql 123

建议:

  • 财务类数据使用 DECIMAL,避免计算误差。
  • 非关键计算(如统计数据)可使用 FLOATDOUBLE

3. 日期与时间(Date & Time)

MySQL 提供多个日期时间类型:

数据类型

存储大小

取值范围

适用场景

DATE

3 字节

1000-01-01 ~ 9999-12-31

生日、订单日期

DATETIME

8 字节

1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

需要精确到秒的时间,如创建时间

TIMESTAMP

4 字节

1970-01-01 00:00:01 ~ 2038-01-19 03:14:07

适用于存储 Unix 时间戳

TIME

3 字节

-838:59:59 ~ 838:59:59

记录时间间隔

YEAR

1 字节

1901 ~ 2155

适用于年份数据

DATETIME vs. TIMESTAMP
  • TIMESTAMP 受时区影响,适合存储事件发生时间。
  • DATETIME 不受时区影响,适合存储固定时间。
代码语言:javascript
代码运行次数:0
运行
复制
sql 体验AI代码助手 代码解读复制代码CREATE TABLE events (
    event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

AI写代码sql
123

4. 选择数据类型的最佳实践

  1. 能用整数就不要用字符串(如性别可用 TINYINT)。
  2. 存储金额、财务数据时,使用 DECIMAL 而非 FLOAT
  3. 短文本(<255 字符)用 VARCHAR,长文本用 TEXT
  4. 索引字段尽量避免 TEXTBLOB,影响查询性能
  5. 时间戳数据尽量使用 TIMESTAMP 代替 DATETIME,节省存储空间

总结

MySQL 提供了多种数据类型,每种类型都有其适用场景。合理选择数据类型可以提升存储效率、优化查询性能,并避免精度损失。希望这篇文章能帮助你在数据库设计时做出更好的选择!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 字符串(String)数据类型
    • 1.1 定长与变长字符串
      • CHAR vs. VARCHAR
    • 1.2 TEXT 和 BLOB
      • TEXT vs. VARCHAR
  • 2. 数字(Numeric)数据类型
    • 2.1 整数类型
    • 2.2 浮点与定点类型
      • FLOAT vs. DECIMAL
  • 3. 日期与时间(Date & Time)
    • DATETIME vs. TIMESTAMP
  • 4. 选择数据类型的最佳实践
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档