MySQL 中 varchar 和 char 有什么区别?

MySQL 中 varchar 和 char 的区别

在 MySQL 中,VARCHARCHAR 是两种常用的字符串类型,它们在存储方式、长度限制和使用场景等方面存在显著区别。


1. 定义与存储方式

CHAR

  • 定义CHAR(n) 是一种定长字符串类型,长度固定为 n
  • 存储方式:存储时无论实际字符串长度如何,都会占用 n 个字符的空间。如果长度不足,会在末尾自动填充空格。
  • 特点:适用于长度固定的字符串,存储效率高,但可能浪费存储空间。

VARCHAR

  • 定义VARCHAR(n) 是一种变长字符串类型,最大长度为 n
  • 存储方式:存储时仅占用实际字符串长度的空间,并额外增加 1~2 个字节记录长度(长度小于 255 时使用 1 个字节,超过 255 使用 2 个字节)。
  • 特点:适用于长度不固定的字符串,节省空间,但在更新数据时可能涉及额外的存储操作。

2. 长度限制

  • CHAR

    • 最大长度为 255 个字符。
  • VARCHAR

    • 最大长度为 65535 字节(包括字符串和记录长度的存储字节),但受限于行的最大存储大小。

3. 存储效率

  • CHAR
    • 由于是定长字符串,读取速度更快,但对于短字符串可能浪费空间。
    • 在频繁更新时性能较稳定,不需要重新调整存储空间。
  • VARCHAR
    • 对于短字符串,空间利用率高,但频繁更新可能需要重新分配存储空间,导致性能下降。

4. 使用场景

  • CHAR
    • 适合存储长度固定的字符串,如身份证号、邮政编码、固定长度的账号等。
  • VARCHAR
    • 适合存储长度变化较大的字符串,如用户名、邮件地址、描述性文字等。

5. 示例

表定义

CREATE TABLE example (
    char_column CHAR(10),
    varchar_column VARCHAR(10)
);

插入数据

INSERT INTO example (char_column, varchar_column) VALUES ('abc', 'abc');

存储结果

假设我们存储了字符串 'abc'

  • CHAR:会存储为 'abc '(长度不足部分用空格填充)。
  • VARCHAR:只存储 'abc',并额外增加 1 个字节记录长度。

6. 查询表现

如果查询中存在空格填充问题,CHAR 列的结果可能与预期不符。例如:
SELECT LENGTH(char_column), LENGTH(varchar_column) FROM example;

结果

LENGTH(char_column) LENGTH(varchar_column) 10 3

7. 总结

特性 CHAR VARCHAR
长度限制 固定长度,最多 255 个字符 最大长度 65535 字节
存储方式 定长存储,空间固定 变长存储,节省空间
存储效率 读取速度快,更新效率高 存储灵活,更新性能稍差
适用场景 长度固定的字段,如 ID、邮编 长度不定的字段,如用户名

建议

  • 如果数据长度固定或几乎固定,优先选择 CHAR
  • 如果数据长度变化较大,优先选择 VARCHAR,以节省存储空间。
posted @ 2024-12-15 14:40  Eiffelzero  阅读(44)  评论(0编辑  收藏  举报