外观
MySQL 中的 varchar 和 char 有什么区别
MySQL
中的 VARCHAR
和 CHAR
有以下区别:
存储方式
CHAR
:是固定长度的字符类型,会根据定义的长度存储固定数量的字符,不足的部分会使用空格进行填充。如CHAR(7)
会始终占用7
个字符的空间,无论实际存储的字符串是1
个字符还是7
个字符。
VARCHAR
:是可变长度的字符类型,会根据实际存储的字符数量来动态分配存储空间,不会浪费额外的空间。如VARCHAR(7)
,存储'abc'
时,就只存储'abc'
以及记录长度的 1
或 2
个字节。
存储空间
CHAR
:存储空间 = 定义长度 × 字符编码长度。CHAR(7)
在UTF-8编码下,最多占用21
字节(7 × 3
)。
VARCHAR
:存储空间 = 实际长度 × 字符编码长度 + 长度值。VARCHAR(10)
存储一个长度为3的字符串时,占用空间为:3
× 字符编码长度 + 1
字节(长度值)。
性能表现
CHAR
:由于长度固定,在排序和查找操作中性能可能更高,特别是对于较长的字符串和固定长度数据,存储和读取速度通常较快。
VARCHAR
:检索和更新操作更快,因为只需要检索或更新实际数据量,在处理大量短字符串时,通常比CHAR
更具性能优势。
最大长度
CHAR
:最大长度为 255
个字符。
VARCHAR
:最大长度可以达到 65,535
个字符,但实际长度受限于行的总大小和字符集。
空值处理
CHAR
:允许空值,并且如果输入文本的长度小于指定的长度,会使用空格填充剩余空间,NULL
值会占用存储空间。
VARCHAR
:默认情况下不允许空值,但可通过设置允许,空字符串(长度为 0
)是有效的VARCHAR
值,NULL
值不占用存储空间。
比较和排序
CHAR
:比较时会填充空格以确保字符串长度一致,然后根据字符集进行区分大小写的比较。
VARCHAR
:在排序和比较时,直接根据字符集进行区分大小写的比较,不会填充空格。