问题背景
今天搞了一个留言新功能,但是老总非要将留言文本长度放开到500的长度,我有些犯难了,到底是用text还是varchar,毕竟之前的使用mysql也没有具体查看varchar的具体长度。
varchar的存储规则
4.0 版本以下:varchar(10)代表的是10个字节,如果我们存放汉字(UTF8)时候,则只能存放3个汉字(每个汉字占用3个字节)
5.0 版本以上:varchar(10)代表的是20个字符,无论存放数字、字母还是汉字(UTF8)(每个汉字占用3个字节),都可以存放10个
varchar和char的区别
char是一种固定长度的类型。(不可变),varchar则是一种可变长度的类型。
举例:
char(N)类型的数据列里,每个值都占用的是N个字节,如果长度小于N,MySql会变态的在他的右侧使用空格字符给补齐到N(当我们在进行检索的时候,那些补齐的空格会给我门自动去掉)
varchar(N)类型的数据列中,每个值只会占用当前数据所占用的字节,再加上一个用来记录他的长度的字节(所以他的总长度是实际长度+1个字节)
MySql行长度
MySql要求我们定一个行的长度不能超过65535个字节(其中不包含text、blob等大字段类型)varchar长度收到了这条长度的限制,和其他非大字段加起来不能超过65535个字节。如果超过了这个长度则会报错的。
varchar最大长度到底是多少?
根据字符集格式不同,会是不同的答案:
字符类型若是GBK,每个字符占用2个字节,最大长度不能超过32766
字符类型是UTF8,每个字符最多占用3个字节,最大长度不能超过21845,当超过了这个长度的时候,mysql会自动将varchar类型转为longtext或者mediumtext
好了,今天关于mysql的varchar就讲解到这里,欢迎大家留言交流,也欢迎大家关注我的工种昊《coder练习生》