频道栏目
首页 > 资讯 > 其他综合 > 正文

char与varchar的区别讲解

18-02-07        来源:[db:作者]  
收藏   我要投稿

区别一,定长和变长

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。

相关TAG标签
上一篇:使用Git版本控制工具将代码托管到GitHub上面的操作方法
下一篇:解决win7和虚拟机中文件共享的问题
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站