首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL字符和varchar字符集&存储大小

问MySQL字符和varchar字符集&存储大小
EN

Stack Overflow用户
提问于 2012-04-10 00:19:21
回答 1查看 13.9K关注 0票数 12

不知道这两种数据类型将占用多少实际存储空间,因为MySQL文档在这方面有点不清楚。

CHAR(M) M×w字节,0 <= M <= 255,其中w是字符集中最大长度字符所需的字节数。 VARCHAR(M),VARBINARY(M) L+1字节如果列值需要0- 255字节,L+2字节如果值可能需要超过255字节

在我看来,这似乎意味着,给定一个utf8 8编码的数据库,一个CHAR将始终占用每个字符32位,而VARCHAR将根据所存储字符的实际字节长度在8到32之间。对吗?或者VARCHAR意味着8位字符宽度,而存储多个八进制UTF8字符实际上会消耗VARCHAR中的多个“字符”?还是VARCHAR也总是每个字符存储32位?这么多的可能性。

这不是我以前这么担心过的事情,但我开始遇到内存中的临时表大小限制,我不一定要增加MySQL的可用池(这是第二次)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-10 00:35:50

CHAR和VARCHAR都计算字符。这两种方法都计算给定字符编码和长度时可能需要的最大存储空间。对于ASCII,是每个字符一个字节。对于UTF-8,这是每个字符3个字节(不是您所期望的4个字节,因为由于某种原因,它不支持任何在UTF-8中需要4个字节的Unicode字符)。到目前为止,CHAR和VARCHAR是一样的。

现在,CHAR只是继续并保留了这么多的存储空间。

相反,VARCHAR分配了1或2个字节,这取决于这个最大存储空间是< 256还是≥256。条目占用的实际空间是这一两个字节,加上字符串实际占用的空间。

有趣的是,这使得85对于UTF-8 VARCHAR来说是一个神奇的数字。

  • VARCHAR(85)使用1字节作为长度,因为最大可能长度为85个UTF-8字符,为3×85 = 255。
  • VARCHAR(86)使用两个字节作为长度,因为最大可能长度为86个UTF-8字符,为3×86 = 258。
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10081500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档