MySQL – CHAR vs VARCHAR区别
嘻嘻发布于2020-03-12
最后更新于2020年2月29日
浏览CHAR和VARCHAR类型相似,但在存储和检索方式上有所不同。它们在最大长度和是否保留尾随空格方面也有所不同。
CHAR和VARCHAR类型的声明长度表示希望存储的最大字符数。例如,CHAR(30)最多可以容纳30个字符。
区别
- CHAR列的长度固定为创建表时声明的长度。长度可以是0到255之间的任何值。VARCHAR列中的值是可变长度的字符串。长度可以指定为0到65,535之间的值。
- 空格填充的区别:当存储CHAR值时,用空格将它们右填充到指定的长度。检索CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL模式,否则将删除尾随空格。存储VARCHAR值时不填充它们。
- 与CHAR不同,VARCHAR值存储为1字节或2字节长度的前缀加上数据。长度前缀表示值中的字节数。如果值需要的长度不超过255字节,则列使用一个长度字节;如果值需要的长度可能超过255字节,则使用两个长度字节。
- 在效率方面,如果存储的字符串长度变化很大,那么使用VARCHAR,如果长度总是相同,那么使用CHAR,因为它稍微快一些。
例子
下表通过显示将各种字符串值存储到CHAR(4)和VARCHAR(4)列的结果来说明CHAR和VARCHAR之间的区别(假设该列使用的是诸如latin1之类的单字节字符集)。
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 |