如果你在同一个表中有一个VARCHAR,那么使用CHAR有什么意义吗?

Eri*_*k B 5 mysql performance varchar char

我刚刚阅读了这个问题的接受答案,这给我留下了这个问题.

以下是该答案的引用:

"不过既然你标记这个问题与MySQL,我会提到具体的MySQL提示:当您的查询或隐生成一个临时表,例如排序时GROUP BY,VARCHAR字段将转换为CHAR获得与固定宽度行工作的优势如果你将大量VARCHAR(255)字段用于不需要那么长的数据,这可能会使临时表非常大."

据我所知,其优点CHAR是你获得了固定宽度的行,所以不是VARCHAR在同一个表中混乱了吗?CHAR当你VARCHAR在同一张桌子上使用时,有什么好处吗?


这是一个例子:

表格CHAR:

CREATE TABLE address (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    street VARCHAR(100) NOT NULL,
    postcode CHAR(8) NOT NULL,
    PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

表没有CHAR:

CREATE TABLE address (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    street VARCHAR(100) NOT NULL,
    postcode VARCHAR(8) NOT NULL,
    PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

表格会不会CHAR比表格更好CHAR,如果是,在什么情况下?

Kno*_*ing 2

VARCHAR”基本上设置了字段的最大长度,并且只存储输入到其中的数据,从而节省空间。“ CHAR”类型具有固定长度,因此如果设置“ CHAR(100)”,则无论内容是什么,都将使用 100 个字符的空间。

唯一获得速度优势的情况是记录中没有可变长度字段(“ VARCHAR”、“ TEXT”等)。您可能会注意到,一旦添加了可变长度字段类型,MySQL 就会 在内部将所有“ CHAR”字段更改为“ ”。VARCHAR

CHAR另外,从空间存储的角度来看,“ ”的效率较低,但搜索和添加的效率较高。它更快,因为数据库只需读取偏移值即可获取记录,而不是读取部分直到找到记录的末尾。固定长度记录将最大限度地减少碎片,因为删除的记录空间可以重新用于新记录。

希望能帮助到你。