MySQL数据库中的字段类型varchar和char的主要区别是什么?哪种字段的查找效率要高,为什么?
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变,当所插入的字符串超出它们的长度时,视情况来处理,如果是严格模式,则会拒绝插入并提示错误信息,如果是宽松模式,则会截取然后插入。如果插入的字符串长度小于定义长度时,则会以不同的方式来处理,如char(10),表示存储的是10个字符,无论你插入的是多少,都是10个,如果少于10个,则用空格填满。而varchar(10),小于10个的话,则插入多少个字符就存多少个。varchar怎么知道所存储字符串的长度呢?实际上,对于varchar 字段来说,需要使用一个(如果字符串长度小于255)或两个字节(长度大于255)来存储字符串的长度。
区别之二
存储的容量不同对char来说,最多能存放的字符个数 255,和编码无关。
而varchar呢,最多能存放 65532 个字符。
VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532 字节,最大有效长度是 65532 字节,在varchar存字符串的时候,第一个字节是空的,不存任何的数据,然后还需要两个字节来存放字符串的长度。所以有效长度就是 65535 - 1 - 2= 65532
由字符集来确定,字符集分单字节和多字节
Latin1一个字符占一个字节,最多能存放 65532个字符
GBK 一个字符占两个字节, 最多能存 32766 个字符 UTF8一个字符占三个字节, 最多能存 21844 个字符注意,char和varchar 后面的长度表示的是字符的个数,而不是字节数。
两相比较,char的效率高,没有碎片,尤其更新比较频繁的时候,方便数据文件指针的操作。但不够灵活,在实际使用时,应根据实际需求来选用合适的数据类型。
给孩子点个关注,点个赞吧,thanks,thanks,thanks