MySQL DATETIME类型存储空间详解:从8字节到5字节的演变

MySQL系列文章

在MySQL数据库设计中,DATETIME类型用于存储日期和时间信息,但其存储空间大小并非固定不变,而是随MySQL版本迭代和精度定义动态变化。本文将详细说明其存储规则,并提供清晰的对比表格。

一、核心结论
  • MySQL 5.6.4 是分水岭:此前固定占用 8 字节;此后优化为 5 字节基础 + 精度附加空间
  • 精度决定扩展空间:若定义小数秒(如 DATETIME(3)),需额外 1~3 字节
  • 无精度定义时默认占 5 字节:现代MySQL(≥5.6.4)的常见场景。

二、存储空间对比表格
MySQL 版本是否支持小数秒数据类型定义存储空间范围存储格式
< 5.6.4❌ 不支持DATETIME8 字节'1000-01-01 00:00:00''9999-12-31 23:59:59'YYYYMMDDHHMMSS(整数)
≥ 5.6.4✅ 支持DATETIMEDATETIME(0)5 字节同上优化的二进制打包格式
≥ 5.6.4✅ 支持DATETIME(1) / (2)6 字节同上(含小数秒)基础5B + 1B精度扩展
≥ 5.6.4✅ 支持DATETIME(3) / (4)7 字节同上(含小数秒)基础5B + 2B精度扩展
≥ 5.6.4✅ 支持DATETIME(5) / (6)8 字节同上(含小数秒)基础5B + 3B精度扩展

:精度扩展空间计算公式:5 + CEIL(fsp / 2) 字节(fsp为小数秒位数,范围0-6)。


三、关键注意事项
  1. 版本查询命令
    确认MySQL版本是首要步骤:

    /* by 01022.hk - online tools website : 01022.hk/zh/utf8.html */
    SELECT VERSION(); -- 输出示例:8.0.33
    
  2. 精度定义检查
    通过表结构查看是否定义小数秒:

    /* by 01022.hk - online tools website : 01022.hk/zh/utf8.html */
    SHOW CREATE TABLE your_table;
    

    若显示created_at DATETIME(3),则表示精度为毫秒(占7字节)。

  3. 空间优化建议

    • 无小数秒需求时,直接使用 DATETIME(默认5字节);
    • 需存储毫秒/微秒时,按业务需求选择最小精度(如DATETIME(3));
    • 旧版本升级后,建议检查表结构以利用空间优化。

四、总结
场景描述存储空间
MySQL 5.6.3及之前版本8 字节
MySQL 5.6.4+,无小数秒(默认)5 字节
MySQL 5.6.4+,含1-2位小数秒6 字节
MySQL 5.6.4+,含3-4位小数秒7 字节
MySQL 5.6.4+,含5-6位小数秒8 字节

现代MySQL(≥5.6.4)中,DATETIME在未定义小数秒时仅需5字节,比旧版本节约37.5%存储空间。合理利用精度定义,可显著优化大规模数据存储效率。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值