stackoverflow的一般建议是在MySQL中使用utf8或utf8mb4,即使对于只包含拉丁字符的字段也是如此。
要澄清,对于仅包含拉丁字符的列,请使用utf8mb4:
答案 0 :(得分:2)
2017年。对每个通用“字符串”字段使用utf8mb4
和VARCHAR(255)
,除非您有一个非常令人信服的理由偏离它。即使是纯粹的英语发音者也喜欢在“¯\ _ _(ツ)_ /¯”和“ᕕ(ᐛ)ᕗ”等情况下使用古怪的非拉丁字符。
电子邮件地址可以在域组件中以及@
之前的本地部分中包含非ASCII字符。无论这些事情的规则是什么似乎都被逐一抛出窗外,所以所有的赌注都是关于未来的。希望@
留下来,这是我唯一依赖的东西。
除非您的系统在内存中处理数十亿个电子邮件地址,否则VARCHAR
的存储成本在很大程度上无关紧要。请记住,VARCHAR(100)
和VARCHAR(255)
占用50个字符的字符串的空间相同。当他们的电子邮件地址“太长”并且被任意修剪时,100长度字段唯一能做的就是让别人紧张。
此外,VARCHAR
测量字符而不是字节的长度,这种差异仅在涉及多字节字符时才相关。 bob@example.com
在Latin-1,UTF-8和UTF8MB4中占用相同数量的空间。
不要将CHAR
用于可变长度字符字段。 20世纪80年代已经去世。放手吧。