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

varchar (255) varchar (2550) 在mysql中实际占的空间会是十倍吗

VARCHAR 存储空间计算

字符集影响
  • UTF-8

    • 每个字符最多占用 3 字节
    • VARCHAR(255) 最多占用 255 * 3 = 765 字节。
    • VARCHAR(2550) 最多占用 2550 * 3 = 7650 字节。
  • UTF-8MB4

    • 每个字符最多占用 4 字节
    • VARCHAR(255) 最多占用 255 * 4 = 1020 字节。
    • VARCHAR(2550) 最多占用 2550 * 4 = 10200 字节。
  • Latin1

    • 每个字符占用 1 字节
    • VARCHAR(255) 最多占用 255 * 1 = 255 字节。
    • VARCHAR(2550) 最多占用 2550 * 1 = 2550 字节。
额外开销
  • 长度前缀
    • 对于 VARCHAR 类型,MySQL 需要额外的字节来存储字符串的实际长度。
    • 如果 VARCHAR 的最大长度小于或等于 255 字节,使用 1 字节 存储长度。
    • 如果 VARCHAR 的最大长度大于 255 字节,使用 2 字节 存储长度。

具体存储空间对比

假设使用 UTF-8 字符集:

  • VARCHAR(255)

    • 最大长度:255 字符。
    • 最大字节数:255 * 3 = 765 字节。
    • 额外开销:1 字节(长度前缀)。
    • 总最大存储空间765 + 1 = 766 字节。
  • VARCHAR(2550)

    • 最大长度:2550 字符。
    • 最大字节数:2550 * 3 = 7650 字节。
    • 额外开销:2 字节(长度前缀)。
    • 总最大存储空间7650 + 2 = 7652 字节。

实际存储空间与数据长度的关系

  • 实际存储空间
    • VARCHAR 列的实际存储空间取决于存储的数据长度,而不是最大长度。
    • 例如,如果 path 列中存储的字符串长度为 100 字符:
      • VARCHAR(255)100 * 3 + 1 = 301 字节。
      • VARCHAR(2550)100 * 3 + 2 = 302 字节。

总结

  • 存储空间

    • VARCHAR(255)VARCHAR(2550) 的存储空间并不是简单的十倍关系,而是取决于字符集和实际存储的数据长度。
    • 使用 UTF-8 字符集时,VARCHAR(2550) 的最大存储空间约为 VARCHAR(255) 的 10 倍,但实际存储空间取决于存储的数据长度。
  • 索引长度限制

    • InnoDB 存储引擎的单个索引最大长度为 3072 字节
    • 如果 path 列使用 VARCHAR(2550),即使字符集为 UTF-8,索引长度也会超过 3072 字节,导致 1071 - Specified key was too long 错误。
    • 解决方案:使用部分索引(如 KEY(path(255)))或调整字符集。

示例

假设 path 列使用 UTF-8 字符集:

  • VARCHAR(255)

    • 最大存储空间:765 + 1 = 766 字节。
  • VARCHAR(2550)

    • 最大存储空间:7650 + 2 = 7652 字节。

结论

  • VARCHAR(2550) 的最大存储空间并不是 VARCHAR(255) 的十倍,而是根据字符集和实际数据长度计算得出。
  • 使用 UTF-8 字符集时,VARCHAR(2550) 的最大存储空间约为 VARCHAR(255) 的 10 倍,但实际存储空间取决于存储的数据长度。

http://www.kler.cn/a/583073.html

相关文章:

  • MySQL的安装、备份还原及主从同步
  • java设计模式之桥接模式
  • 深度学习GRU模型原理
  • Linux——Shell运行原理以及Linux权限
  • 【Linux docker 容器】关于想要让虚拟机在开机时候也docker自己启动,容器也自己启动,省去要自己开docker和容器
  • 已安装 MFC 仍提示“此项目需要 MFC 库”的解决方法 (MSB8041)
  • 骑士74CMS_v3.34.0SE版uniapp全开源小程序怎么编译admin和member流程一篇文章说清楚
  • 【Go语言圣经1.5】
  • 前端对话框项目——调用字节Coze API
  • 18 | 实现简洁架构的 Handler 层
  • python str repr方法区别
  • 数据库原理4
  • 开源链动2+1模式AI智能名片S2B2C商城小程序在KOC参与门店做透中的应用探索
  • 本地部署资源聚合搜索神器 Jackett 并实现外部访问
  • 苹果“被盗设备保护”的取证意义
  • Haproxy配置入门
  • 在芯片设计的后端流程中,通过metal修timing是什么意思,怎么实施。举个timing违例说明一下
  • 详解 C++ 与 C 兼容的接口(如 extern “C“ 函数)
  • 【Academy】SQL 注入 ------ SQL injection
  • [023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级