我们哪个是对的?
从前,你的老板是。但是随着时间的流逝,情况发生了变化。如今,您可以了(但在竞选老板之前,请务必也阅读Nelson的回答)。
MySQL的旧版本以及几乎所有版本的旧版本,与较旧的Latin1 / ISO-8859-1(5)相比,对UTF8的处理要好得多。
有一个原因可以解释为什么UTF8已被创建,发展和推广到几乎所有地方:如果实施得当,它会更好。由于Latin1字符为8位,而UTF8字符的长度可能为8至32位,因此存在一些性能和存储问题。因此,在计划时,VARCHAR
您需要考虑到这一点。而且您的搜索例程将稍慢一些。他们将能够做更多的事情(例如,具有重音敏感度的搜索或不进行重音搜索。如果不进行大量工作就无法在Latin1中进行搜索),但是它们会花费更多时间。
但另一方面,存储价格便宜,文件大小的实际开销不到2-3%,计算能力也很便宜,并且符合摩尔定律也越来越便宜;而您的时间和客户的期望肯定不是。
如果您是开发此类工具的人,则可能需要担心搜索工具等。但是你可能不是。您使用这些工具;即使是那些昨天(不像以前的MySQL完全不兼容)不完全兼容UTF8的代码,也已经成为今天或不久之后(例如支持utf8mb4的MySQL)。
因此,通过以正确的方式精心计划和实施UTF8(事后不要将其放在Latin1上),您可以获得的代码可以很好地适应未来的发展,如果您打算与任何亚洲国家/地区开展业务,那么这是非常好的事情。如果您没有这样的计划,其他人也会有,这些人可能是您的客户,供应商或合作伙伴。
因此,当他们开始向您发送UTF8数据时,您将必须设置一个复杂的thingamajig来回转换为Latin1,并处理无法解决的情况。
当您考虑预算中针对邪恶的mojibake忍者的几次小冲突的成本,并考虑到它们不会消失时(如您已经发现的那样),那么您会意识到使用UTF8不仅更简单,而且会便宜的为好。