法语口音的 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
字符。但这是一个很小的优化,不值得做。
我将有一个包含单词和一列的大型数据库 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
字符。但这是一个很小的优化,不值得做。