我将有一个包含单词的大型数据库,表格中的一栏最多有3个字母,但也会有一些法语口音,如-,
一个例子是有一个列,它可能有id 1 a 2b 3 vf 4存在5t。
因此,它们不会在任何时候都被修复,有时某些行会有重音字符,据我所知,这些字符还需要一个字节。
我在想,为那一栏指定什么是最好的选择?CHAR可能更快,因为它们每次最多需要3个字节,但通常情况下会存储1-2字节。
另一方面,VARCHAR是可变长度的,我不需要指定任何内容,但我已经阅读过char对性能更好,因为我将经常阅读列词。
你认为什么是最好的?为什么?
发布于 2017-04-11 21:32:02
使用VARCHAR,除非您说的是固定长度的字段,比如保证一定长度的ISO国家代码。
记住,字符和字节不是一回事。该列和/或表和/或连接和/或原始字符串的字符集将对实际存储的内容产生影响。在一些字符集中,像é这样的字符是一个字节,而在另一些字符集,比如UTF-8,则是两个字节。其他字符,如3或4个字节,需要utf8mb4。
如果您请求CHAR(2),那么这将允许将列的设置设置为任何字符的两个字符。
发布于 2017-04-12 02:13:23
过早优化
获取记录比您在行中所做的任何事情都要昂贵得多。
几乎总是简单的VARCHAR(n),其中n是数据的合适长度。
CHAR(n)只对十六进制、country_code、postal_code、uuid等有用--这些都是固定长度和CHARACTER SET ascii的东西。
当然,对于法语和欧洲大部分地区来说,你可以用一个字节的CHARACTER SET latin1字符。但这是一个如此微小的优化,不值得去做。
https://stackoverflow.com/questions/43356250
复制相似问题