使用拉丁字符集在MySQL中存储电子邮件和域名

时间:2017-08-15 05:53:21

标签: mysql

stackoverflow的一般建议是在MySQL中使用utf8或utf8mb4,即使对于只包含拉丁字符的字段也是如此。

要澄清,对于仅包含拉丁字符的列,请使用utf8mb4:

  1. ...会产生更大的索引和更高的内存使用量?
  2. ...使用列类型varchar(100)或char(100)时使用更多存储空间?
  3. ...允许在列类型varchar(100)或char(100)中存储超过100个字符?

1 个答案:

答案 0 :(得分:2)

2017年。对每个通用“字符串”字段使用utf8mb4VARCHAR(255),除非您有一个非常令人信服的理由偏离它。即使是纯粹的英语发音者也喜欢在“¯\ _ _(ツ)_ /¯”和“ᕕ(ᐛ)ᕗ”等情况下使用古怪的非拉丁字符。

电子邮件地址可以在域组件中以及@之前的本地部分中包含非ASCII字符。无论这些事情的规则是什么似乎都被逐一抛出窗外,所以所有的赌注都是关于未来的。希望@留下来,这是我唯一依赖的东西。

除非您的系统在内存中处理数十亿个电子邮件地址,否则VARCHAR的存储成本在很大程度上无关紧要。请记住,VARCHAR(100)VARCHAR(255)占用50个字符的字符串的空间相同。当他们的电子邮件地址“太长”并且被任意修剪时,100长度字段唯一能做的就是让别人紧张。

此外,VARCHAR测量字符而不是字节的长度,这种差异仅在涉及多字节字符时才相关。 bob@example.com在Latin-1,UTF-8和UTF8MB4中占用相同数量的空间。

不要将CHAR用于可变长度字符字段。 20世纪80年代已经去世。放手吧。