Mysql char vs varchar
在mysql中,CHAR和VARCHAR都是用来存储字符串的,两者声明时都需要指示长度,如CHAR(30)代表最长存储30个字符的数据。下面说明下两者的区别。
CHAR
- 长度范围:0-255
- 存储方式:将要存储的数据的右侧填充空格到指定长度。
- 读取方式:除非PAD_CHAR_TO_FULL_LENGTH模式被开启,否则将会去掉空格。
VARCHAR
- 长度范围:0-65535
-
存储方式:VARCHAR存储时会带上1-byte或者2-byte长度的前缀,这个前缀用来指示这个数据中有多少字节(byte)
- 当字符串长度没有超过255字节时,使用1-byte来存储前缀
- 当字符串长度超过255字节时,使用2-byte来存储前缀
- VARCHAR的值将不会被填充空格保存,但是为了与标准SQL保持一致,如果要存储的值的末尾有空格,则会被保存下来。
相同点
- 当要存储的字符串长度超过指定的长度时,如果是strict SQL模式,则字符会被截断并产生一个error;如果是非strict模式,则会被截断并产生一个warning,因此官方文档建议使用严格模式。
下面的表格是个例子:
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 |