mysql中char和varchar有什么区别?

我记得varchar是可变长 char不可变
可是刚刚我定义char(3) 怎么输入2个字符也可以呢?

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).

在MySQL中用来判断是否需要进行对据列类型转换的规则

1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-10-21

mysql中char与varchar的区别分析

1.都是用来存储字符串的,只是他们的保存方式不一样。

2.char有固定的长度,而varchar属于可变长的字符类型。

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:


char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

在MySQL中用来判断是否需要进行对据列类型转换的规则



1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.


2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.


3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.

本回答被网友采纳
第2个回答  2020-03-31
varchar通常用于保存可变长字符串。在磁盘存储数据时,它只会占用实际使用到的空间,因此对性能有提升。vachar在保存数据时会额外使用1个或者2个字符,用于记录列的长度,如果列内字节长度小于等于255就使用1个字节记录,如果是大于255则使用2个字节记录。因为varchar是变长的,所以update操作可能会产生碎片,从而使列的长度变长,mysql还需要做额外的工作处理。其实varchar(5)和varchar(255)存储'hello'所用的空间是一样的,但是我们在实际使用的时候,列的长度还是越短越好,原因是更长的列会占用更多的内存,Mysql通常会分配固定大小的内存块保存内部值。这个在内存临时表做排序和操作的时候会变得很糟糕,在磁盘临时表进行排序时也会特别的糟糕。
再说一下char,对比下你就会明白。
char类型适用于存储固定长度的数据。比如说MD5后的密码,这个长度就是固定的32位,很适合使用char类型。因为char类型是固定长度,因此在修改数据时也不容易产生碎片。他在磁盘上的存储空间是固定的,如果存储的数据长度不够,会在右侧以空格的方式补充,方便进行比较。对于非常短的列(单字节字符集),char的效率比varchar要高,因为char不需要使用额外的字节去记录长度。
使用什么样的类型存储数据,要根据实际情况而定,最好是对各种存储类型都有一定的了解。
纯手打,希望可以帮到你,共同进步。:)
第3个回答  2008-04-09
char固定长度,是说占用空间的长度一定,而不是必须有那么多值。你输入两个字符,第三个字符空着,但是必须不能被其它字符占用。
varchar就可以啊!没有占用到那么长,就可以少给她分配空间,从而达到介绍资源的目的!
第4个回答  推荐于2018-03-02
在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节,这个说法是错的。当 M <= 255 的时候是用一个字节即可记录其长度,当 M>255 的时候则需要2个字节。因为 1 个字节只能记录变长长度为 0~255,而如果变长长度为 32767 这种大于 255 的值的时候,是没有办法单单用1个字节记录下来的。本回答被网友采纳
相似回答