对线面试官-CHAR和VARCHAR了解嘛,区别是什么

开发 前端
VARCHAR则为一种可变长度数据类型,仅存储实际的字符串内容,无需填充空格。故在存储短字符串时,VARCHAR能够节省空间,长度范围为0至65535(适用于MySQL 5.0.3及之后版本)。

面试官:我看你们项目上用的是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可参考历史文章:

日活3kw下,如何应对实际业务场景中SQL过慢的优化挑战?

责任编辑:武晓燕 来源: 码上遇见你
相关推荐

2024-03-25 13:02:00

MySQL索引主键

2021-07-02 07:06:20

React组件方式

2023-02-09 08:48:47

Java虚拟机

2023-02-17 08:10:24

2024-04-03 15:33:04

JWTSession传输信息

2021-05-12 08:20:53

开发

2023-10-06 00:16:21

RedisMySQL事务

2023-10-23 11:07:37

HTTPRPC

2021-12-13 06:56:45

Comparable元素排序

2021-12-23 07:11:31

开发

2024-03-20 15:12:59

KafkaES中间件

2022-11-15 10:03:34

2024-04-23 08:19:48

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2021-06-03 08:55:54

分布式事务ACID

2021-12-10 12:01:37

finalfinallyfinalize

2021-11-30 07:44:50

FinalFinallyFinalize

2017-11-21 22:49:10

2016-03-21 10:40:53

RDDSpark SQL数据集

2023-02-09 07:01:35

转发重定向Java
点赞
收藏

51CTO技术栈公众号