看起来,对大多数字段使用 ASCII 字符集,然后仅对需要它的字段指定 utf8,可以将数据库必须执行的 I/O 量减少 100%。
有人知道这是真的吗?
更新:以上并不是我的问题。我应该说:使用拉丁语作为默认字符集,然后只为需要它的字段指定 utf8mb4。我们的想法是:使用 1 字节与 2 字节相比,I/O 应该提高 100%。对困惑感到抱歉。
简答: 不值得担心。
长答案:
两个问题:
将两种编码与相应的_bin(ascii_bin或utf8_bin)进行比较COLLATION
就像比较字节一样简单——所以没有显着差异。其他排序规则可能有所不同,其中 ASCII 速度更快。But与获取行等的工作量相比,差异微不足道。
Ascii 是 utf8 的子集。 utf8 为每个 ascii 字符仅存储 1 个字节,就像 ascii 一样。所以,没有空间差异。 (西欧的重音字母需要 1 字节 latin1 或 2 字节 utf8;因此不兼容且大小不同。)空间会导致缓存,从而导致性能上的轻微差异。
对于英文文本,节省 0%。对于欧洲人来说,latin1 只能节省几个百分点;对于世界上大多数其他地方来说,utf8 是唯一可行的解决方案。对于中文和Emoji来说,utf8mb4是必须的。
在某些情况下,字符串占用的空间会扩展到潜在的最大值。country_code CHAR(2) CHARACTER SET ...
对于 ascii 将占用 2 个字节; utf8 为 6 个字节。
底线:
使用 ascii 表示国家/地区代码、十六进制、邮政编码、uuid、md5 等。如果您要走向国际,和/或需要表情符号,请使您的“字符串”为 utf8mb4。但这样做是因为它是“正确的”,而不是因为你会神奇地获得更快的速度;而是因为它是正确的。你不会的。并在创建表时执行此操作;以后改就是坑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)