我服了,上班在 Excel 里都能摸鱼。。。

大家好!我是鸭鸭。

鸭鸭发现,最近大家工作的积极性越来越高。每次路过同事的屏幕前,有人开着 VsCode ,有人打开 Excel。

图片

图片

但鸭鸭仔细一看,页面好像不太对劲?

淘宝的官网怎么变成这样了?!

鸭鸭不信邪地打开自己的淘宝,发现除了这两种,还有更多摸鱼人可选的主题:

图片

程序员、运营、设计师……主题风格真的是适配各个不同岗位的打工人。

不知道淘宝这次更新 web 端,是不是为了方便我们上班的时候摸鱼凑单双十一。他真的,我哭死。

新主题上线之后,鸭鸭的摸鱼水平已经 next level 了!

话说回来,面试鸭之前也上线了可以摸鱼刷题的 IDEA 插件,大家上班别忘了来找鸭鸭刷题!

带大家愉快摸鱼,快乐刷题,鸭鸭可是认真的!

在 JetBrains IDE 中打开设置,找到 Plugins 插件,搜索 mianshiya 即可安装哦~

鸭鸭已经为大家准备了9000多道面试题,助力大家收获 offer,今天的摸鱼时间,来看看这道题吧!

MySQL 中 varchar 和 char 有什么区别?

回答重点

CHAR 和 VARCHAR 是两种用于存储字符串的列类型,它俩最大的不同就是一个是固定长度,一个是可变长度。

  • CHAR(n):固定长度的字符串。CHAR 列的长度是固定的,即使存储的字符串长度小于定义的长度,MySQL 也会在字符串的末尾填充空格以达到指定长度(如果 char 类型的字符串后面有空格的话,innodb 会忽略)。
  • VARCHAR(n):可变长度的字符串。VARCHAR 列的长度是可变的,存储的字符串长度与实际数据长度相等,并且在存储数据时会额外增加 1 到 2 个字节(字符长度超过 255,则使用两个字节)用于存储字符串的长度信息。

理论上来说 CHAR 会比 VARCHAR 快,因为 VARCHAR 长度不固定,处理需要多一次运算,但是实际上这种运算耗时微乎其微,而固定大小在很多场景下比较浪费空间,除非存储的字符确认是固定大小或者本身就很短,不然业务上推荐使用 VARCHAR。

下面以表格方式总结方便横向对比:

特点charvarchar
存储方式定长字符串(字符串长度小于定义的长度,会使用空格进行填充)变长字符串(不会额外填充空格)
存储空间始终占用固定长度空间只占用实际需要的存储空间
性能影响始终占用固定长度的存储空间,因此在存储时可能会浪费一些空间 (不需要记录额外长度信息,在某些情况下可能更快)只占用实际需要的存储空间,因此可以节省存储空间 (需要记录额外长度信息,占据1~2个字节),在某些情况下可能稍微影响性能)
适用场景适合存储固定且短的字符串适合存储变化或较长的字符串

扩展知识

MySQL 执行 orderby 排序的时候,会利用 sort_buffer。

假设 a、b、c 都为 varchar 类型,当前要执行select a,b,c from t1 where a = '面试鸭' order by b;

MySQL 计算 a b c 总长度比较长,sort_buffer 可能放不下,就会使用双路排序,即 sort_buffer 里存放需要排序的字段 b 和 id 进行排序,待排完后,再通过 id 回表查询得到a、b、c 字段。这样就多了回表的一步,性能比较差。

图片

如果 select 字段长度少,那么就可以使用单路排序,即将 select 的数据都放入到 sort_buffer 中,排完序后直接返回给客户端。

图片

这里计算 a、b、c 长度依据的就是 varchar(n) 中的 n,所以如果 n 设置很大,虽然占用空间是动态的,但是会隐性影响排序的性能。

面试鸭现在已经有 9000 多道面试题,助力大家收获 offer,欢迎来面试鸭刷题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值