MySQL 中 char 和 varchar 的区别是什么?

更新时间 2023-04-05 10:05:45

charvarchar 是 MySQL 中两种存储字符串类型的数据类型,它们的区别主要在于存储方式和性能方面

  1. 存储方式不同

char 是一种固定长度的数据类型,定义时必须指定长度,它会占用固定长度的存储空间。例如,定义一个 char(10) 的字段,即使实际存储的字符串长度不到 10 个字符,也会占用 10 个字符的存储空间。

varchar 是一种可变长度的数据类型,定义时也必须指定最大长度,但实际存储的字符串长度可以在 1 到最大长度之间变化,它只会占用实际存储的字符串长度加上一定的存储空间,因此可以节省存储空间。

  1. 性能方面

由于 char 是一种固定长度的数据类型,所以当使用 char 类型存储字符串时,MySQL 在存储时不需要额外计算存储空间大小,因此在一些场景下 char 类型的性能会略优于 varchar 类型。

示例代码如下:

CREATE TABLE char_demo (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name_char CHAR(10),
  name_varchar VARCHAR(10)
);

INSERT INTO char_demo (name_char, name_varchar) VALUES ('hello', 'hello');

SELECT * FROM char_demo;

在上述示例代码中,我们创建了一个 char_demo 表,其中包含一个 char 类型的字段 name_char 和一个 varchar 类型的字段 name_varchar。然后我们向表中插入一条记录,分别使用 charvarchar 类型存储字符串 'hello'。最后我们查询表中所有记录。

运行结果如下:

+----+-----------+--------------+
| id | name_char | name_varchar |
+----+-----------+--------------+
|  1 | hello     | hello        |
+----+-----------+--------------+

从结果可以看出,使用 char 存储字符串 'hello' 时,它会自动在后面填充空格,以达到指定的长度 10,而使用 varchar 则不会填充空格,它会根据实际长度存储字符串。