法语口音的 char 与 varchar(多字节字符)

char vs varchar for french accents (multibyte characters)

我将有一个包含单词和一列的大型数据库 table 中的最多 3 个字母 会有一些法国口音,如 â、ê、î、ô、û、

一个例子是有一个列可能有 [id][第 2 列] 1个 2乙 3 vf 4 欧 5吨

所以它们不会一直固定,有时某些行会 有重音字符,据我所知需要多一个字节。

我在想为该列指定的最佳选项是什么? CHAR 可能更快,因为它们每次最多需要 3 个字节 但通常会存储 1-2 个字节

另一方面,VARCHAR 是可变长度的,我不需要指定任何内容 但我读过 char 对性能更好,因为我将阅读专栏 经常说话。

你认为最好的是什么?为什么?

使用 VARCHAR 除非您谈论的是固定长度字段,例如 保证 一定长度的 ISO 国家/地区代码。

记住字符字节不是一回事。此列的字符集 and/or table and/or 连接 and/or 原始字符串将对实际存储的内容产生影响。在某些字符集中,像 é 这样的字符是一个字节,而在其他字符集中,如 UTF-8,是两个字节。其他字符如将是三个或四个字节,需要 utf8mb4.

如果您要求 CHAR(2) 那么这将允许列设置为任何字符集的两个字符。

过早的优化。

获取记录的成本 比您在 行中所做的几乎任何事情都要昂贵。

几乎总是简单地 VARCHAR(n),其中 n 是适合数据的长度。

CHAR(n) 仅对 十六进制、country_code、postal_code、uuid 等有用——既定长又固定长度的东西CHARACTER SET ascii.

当然,对于法语和欧洲大部分地区,您可以使用单字节 CHARACTER SET latin1 字符。但这是一个很小的优化,不值得做。