面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?

简介: 一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。

一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。


另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码免费领取!


(附赠10万字大厂内部面试资料!)

1、两者区别

要回答好这个问题,得了解清楚CHAR和VARCHAR的区别:

5c19aafda8abe22fd2c23a2ed39bc01d.jpg

第1,存储长度不同


CHAR类型的长度是固定的,VARCHAR的长度是可变的。

149d14cebf1e43cc89b5ab6b0e905260.png

假设,当我们当定义CHAR(10),输入的值是"abc",但是它占用的空间一样是10个字节,会包含7个空字节。当输入的字符长度超过指定的数时,CHAR会截取超出的字符。而且,当存储为CHAR的时候,MySQL会自动删除输入字符串末尾的空格。

b6c7b42144c61034ca114c8ec94a5f9c.jpg

所以,CHAR非常适合存储很短的、固定长度的字符串。


VARCHAR类型用于存储可变长度且非Unicode的字符数据。但可变长度必须在1和8000之间的数值。

ff60c5fea5c5ad34054d6a21786842d6.jpg

比如VARCHAR(10),然后输入abc三个字符,那么实际存储大小为3个字节。

f5a46e67a96381d6e854d0e6e16e19b3.jpg

除此之外,VARCHAR还会保留1个或2个额外的字节来记录字符串的实际长度。如果定义的最大长度小于等于255个字节,那么,就会预留1个字节;如果定义的最大长度大于255个字节,那么就会预留2个字节。

55325d3956a64c22bd61f7a89ec18caf.png

第2,存储效率不同

b08d1bc30cc17b86fd6dcab6fea1d743.jpg

CHAR类型每次修改后的数据长度不变,效率更高。而VARCHAR每次修改的数据要更新数据长度,效率更低。

189b8811642a422043e5c30b96cf4750.jpg

第3,存储空间不同

9a89791daac54823b5bd887ba77b62c3.png

CHAR存储空间是初始的预计长度字符串再加上一个记录字符串长度的字节,可能会存在多余的空间。而VARCHAR存储空间的时候是实际字符串再加上一个记录字符串长度的字节,占用空间较小。

2、答案分析

642ce73a082a461fba76b4f0448f0ce9.jpg

根据以上的分析,CHAR非常适合存储MD5值。因为MD5是一个定长的值,对于固定长度的非常短的列,CHAR比VARCHAR效率也更高。


最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以从我的个人煮叶简介中找到,希望能够以此来提高各位粉丝的通过率。

相关文章
|
4月前
|
存储 数据管理 数据库
|
5月前
|
存储 Java 程序员
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
80 10
|
7月前
|
存储 关系型数据库 MySQL
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
本篇文章来讨论MySQL字段的字符类型选择并深入实践char与varchar类型的区别以及在千万数据下的性能测试
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
|
5月前
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
53 0
|
7月前
|
存储 API Android开发
Android 11 中的存储机制更新,面试心得体会
Android 11 中的存储机制更新,面试心得体会
|
7月前
|
存储 机器学习/深度学习 关系型数据库
mysql中char和varchar的区别
mysql中char和varchar的区别
194 1
|
7月前
|
存储 数据库
5. CHAR和VARCHAR的区别?
`CHAR`和`VARCHAR`在数据库中有所不同:`CHAR`长度固定,用空格填充,存储效率高,英文占1字节,汉字占2字节;而`VARCHAR`长度可变,节省空间,英文和汉字都占2字节。
88 0
|
7月前
|
存储 SQL NoSQL
面试题:char和varchar的区别?
字节面试题:char和varchar的区别?
139 0
|
7月前
|
存储
面试题:计算机内部如何存储负数和浮点数?
面试题:计算机内部如何存储负数和浮点数?
121 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL之varchar和char的区别
MySQL之varchar和char的区别
74 0
下一篇
DataWorks