插件窝 干货文章 sql中的char与varchar有什么区别

sql中的char与varchar有什么区别

char 我们 存储 varchar 412    来源:    2024-10-16

我们在使用sql定义字符串类型的时候,经常会看到char与varchar类型

create table t1(name char(5));
create table t2(name varchar(5));

作为初学者,我们就会对此感到疑惑,怎么一会用char,一会又用varchar,它们有什么区别呢

书上给它们的解释是char为定长的字符串型,varchar为变长的字符串型,这个解释虽然很简洁,但也确实说明了要点,接下来我们来详细聊聊它们的区别。

char(5)中的5实际上就是存储该字符串的字符的个数,如果我们给其插入”abc",DBMS在存储的时候会自动在后面补两个空格以达到5位,即“abc  ”;而varchar(5)中的5指的是允许该字符串存储的最大长度,我们插入几位,只要没超过这个长度,其内部存储就是几位。

那我们能怎么实际的观察到我们存储的位数呢,我们以mysql为例,我们可以通过char_length()函数来查看存储的字符的长度

insert into t1 values('abc');
insert into t2 values('abc');
select char_length(name) from t1;
select char_length(name) from t2;

但是t1和t2表都显示3,这是为什么呢?

这是由于mysql的检索方式,mysql在检索char类型的时候,它会自动去掉其中的空格,我们可以通过以下设置来改变mysql的方式来让char显形

SET sql_mode='PAD_CHAR_TO_FULL_LENGTH';

这时我们再通过char_length(name)来获得name的存储位数,就会发现t1表为5,t2表为3。

接下来我们再来聊聊mysql的存储机制

存储char类型时,如果长度设为4,那其内部会用空格给其填充空格固定4个字节,所以这样会浪费大量的空间;存储varchar类型时,其会用一个字节存放它的位数,然后再根据它的位数给它分配字节。

虽然varchar使用起来较为灵活,节省了一定的空间,但是它在判断位数时也耗费了时间,从整个系统的性能角度来说,char数据类型处理的速度更快,有时甚至可以超出varchar处理速度的很多倍,所以在大部分情况下,我更推荐使用char类型,因为现在存储空间已经不是一种限制,我们更多的会去关注其的性能。

到此这篇关于sql中的char与varchar有什么区别的文章就介绍到这了,更多相关sql char与varchar区别内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!