char与varchar的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40575384/article/details/79276108

区别一,定长和变长


char 表示定长,长度固定,varchar表示变长,即长度可变

区别之二,存储的容量不同


对char来说,最多能存放的字符个数 255,和编码无关。
而varchar呢,最多能存放 65532 个字符。
VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节
最大有效长度是 65532 字节,在varchar存字符串的时候,第一个字节是空的,不存任何的数据,然后还需要两个字节来存放字符串的长度。所以有效长度就是 65535 - 1 - 2 = 65532
由字符集来确定,字符集分单字节和多字节
Latin1一个字符占一个字节,最多能存放  65532个字符
GBK 一个字符占两个字节, 最多能存 32766 个字符
UTF8一个字符占三个字节, 最多能存 21844 个字符
注意,char和varchar 后面的长度表示的是字符的个数,而不是字节数。

存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。



编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
 
行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

猜你喜欢

转载自blog.csdn.net/weixin_40575384/article/details/79276108