首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【高性能MySQL】Schema与数据类型优化-字符串类型(一)

【高性能MySQL】Schema与数据类型优化-字符串类型(一)

原创
作者头像
用户9295575
发布2025-01-31 08:07:40
发布2025-01-31 08:07:40
1940
举报

VARCHAR和CHAR类型

VARCHAR类型用于存储可变长字符串。它比定长类型更节省空间。有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间。

VARCHAR需要使用1或2个额外字节记录字符串长度,如果列的最大长度小于或者等于255字节,则只使用1个字节表示,否则使用2个字节表示。例如一个VARCHAR(10)需要使用11个字节的存储空间。VARCHAR(1000)使用1002个字节。

由于行是可变长的,在update时可能使原来的行变长了,这会导致额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,这时,不同的存储引擎处理的方式不一样。例如,MyISAM会将行拆成不同的片段存储,InnoDB需要分裂页来使行可以放进页内。

什么时候使用VARCHAR更合适呢?字符串列的最大长度比平均长度大很多。列的更新很少,所以碎片不是问题了。使用UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。

CHAR类型是定长的,当存储CHAR值,MySQL会删除所有的末尾空格。CHAR值会根据需要采用空格填充的方式方便比较。它适合存储很短的字符串。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR不容易产生碎片。对于很短的列CHAR比VARCHAR更有优势,CHAR(1)采用单字节存储字符集,只需要一个字节。VARCHAR(1)需要2个字节,因为还有一个记录长度的额外字节。

春节不间断,持续充电!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档