超出char或者varchar设置长度后,字符串会被截断。
char和varchar的区别在于:char不管实际的value值是多少,都会占用n个字符空间,而varchar只会占用实际字符占用的空间+1,并且实际空间+1<=n;
下图可以非常明显的看到结果:
Value | CHAR(4) | Storage Required | VARCHAR(4) | Storage Required |
'' | ' ' | 4 bytes | '' | 1 byte |
'ab' | 'ab ' | 4 bytes | 'ab' | 3 bytes |
'abcd' | 'abcd' | 4 bytes | 'abcd' | 5 bytes |
'abcdefgh' | 'abcd' | 4 bytes | 'abcd' | 5 bytes |
总体来说:
1、char,存定长,速度快,存在空间浪费的可能,会处理尾部空格,上限255。
2、varchar,存变长,速度慢,不存在空间浪费,不处理尾部空格,上限65535,但是有存储长度实际65532最大可用。
3、text,存变长大数据,速度慢,不存在空间浪费,不处理尾部空格,上限65535,会用额外空间存放数据长度,顾可以全部使用65535。
如果确定某项内容的长度,那就用char,否则用varchar。
varchar和text在性能上没什么大的区别,本着short is better原则,还是使用varchar根据需求来限制最大上限最好。