✅对线面试官 -CHAR 和 VARCHAR 了解嘛,区别是什么
面试官:我看你们项目上用的是 MySQL,相关的类型了解吗?
派大星:嗯,了解一些。
面试官:嗯,那你知道 char 和 varchar 的区别是什么嘛?简单说一说。
派大星:好的。
首先,CHAR 和 VARCHAR 均为数据库中用于存储字符串数据的数据类型。它们之间的主要区别在于存储空间的使用方式。
比如:CHAR为一种定长数据类型
,其长度固定且在存储时会自动加入空格以填满指定长度,长度范围为 0 至 255;
VARCHAR则为一种可变长度数据类型
,仅存储实际的字符串内容,无需填充空格。故在存储短字符串时,VARCHAR 能够节省空间,长度范围为 0 至 65535(适用于 MySQL 5.0.3 及之后版本)。
若采用 CHAR(100),插入记录后即分配了 100 个字符,后续修改不引起页分裂问题;而 VARCHAR(100)因未预分配存储空间,初始插入数据时,可变长度字段按实际长度储存,且数据在文件中紧密连续。若值变长,原位置无法扩展,无法覆盖原空间,MySQL 将采用页分裂方式扩展字段的长度。
面试官:不错,既然这样,它俩在使用的时候有什么有缺点呢?
派大星:
VARCHAR 的优势:在于其可变长度的字符类型,具有更好的兼容性
;然而,使用 VARCHAR 可能引发内存碎片问题,需要额外 1 到 2 个字节存储长度信息,并更新语句可能导致页分裂等情况。
举例来说,适合使用 VARCHAR 的场景包括存储产品描述(可变长度)、用户地址(可变长度)以及用户名称(可变长度)。
CHAR 的长处在于其定长字符串类型,有助于减少内存碎片
,并无需额外的磁盘空间来存储长度信息;但其短板在于会消除列末尾的空格信息。
CHAR 在长度不足时会补充空格,因此,当在一个长度为 10 的 CHAR 中分别存储"paidaxing "和"paidaxing"时,实际存储的均为"paidaxing ",导致原空格信息丧失。
举例来说,适合使用 CHAR 的情境包括存储身份证号(固定长度)、订单号(固定长度)以及国家编码(固定长度)。
面试官:挺好,看来确实掌握的不错。
派大星:嘿嘿,谢谢,就是在使用过程中有去比较了解过。毕竟如果在设计索引的时候需要考虑,具体的索引设计原则以及优化慢 SQL 可参考历史文章:
https://mp.weixin.qq.com/s/9TBW5nrGpw3QbaotbX9TaQ
https://mp.weixin.qq.com/s/T4kkgOdDaklv3LbmAlGgYA
如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或微信搜索【码上遇见你】。
免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。
好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。
版权声明: 本文为 InfoQ 作者【派大星】的原创文章。
原文链接:【http://xie.infoq.cn/article/3731d382a59618d4c72c935eb】。
本文遵守【CC BY-NC-SA】协议,转载请保留原文出处及本版权声明。
评论