我将拥有一个包含单词和一列的大型数据库 但是,该表最多只能包含3个字母 会有一些法语口音,如â,ê,î,ô,û,
一个例子是拥有一个可能有的列 [ID] [列2] 1 a 2 b 3 vf 4êf 5 t
所以它们不会一直被修复,有时候会有一些行 有重音字符,据我所知,需要多一个字节。
我在想什么是为该列指定的最佳选择? CHAR可能更快,因为它们每次最多需要3个字节 但经常会存储1-2个字节
另一方面,VARCHAR是可变长度的,我不需要指定任何东西 但我已经读过char更好的性能,因为我将阅读专栏 经常说的话。
您认为最好的是什么?为什么?
答案 0 :(得分:0)
使用VARCHAR
,除非您正在谈论固定长度字段,例如保证一定长度的ISO国家/地区代码。
记住字符和字节不是一回事。此列和/或表和/或连接的字符集和/或原始字符串将对实际存储的内容产生影响。在某些字符集中,é
这样的字符是一个字节,而在其他字符集中,如UTF-8,它是两个字符。其他字符将是三个或四个字节,需要utf8mb4
。
如果您要求CHAR(2)
,那么将允许列的任何字符集的两个字符设置为。
答案 1 :(得分:0)
过早优化。
获取记录很多比在行中的任何事情都要贵。
几乎总是VARCHAR(n)
,其中n
是数据的合适长度。
CHAR(n)
对于hex,country_code,postal_code,uuid等非常有用 - 固定长度和CHARACTER SET ascii
的内容。
当然,对于法国人和欧洲大部分地区来说,你可以使用单字节CHARACTER SET latin1
字符。但这是一个非常小的优化,不值得做。