将MySQL数据库从utf8_general_ci更改为utf8_bin - 是个好主意吗?

3
我最近了解到,如果您不希望MySQL将å读作a或将ö读作o,则需要使用uft8_bin排序规则。
我的网站是多租户的,因此并非每个人都需要使用uft8_bin排序规则。我的一些客户位于挪威和芬兰,需要正确排序这些“非英语”字符。
但是是否将表设置为uft8_bin是一个好主意呢?
还是有更好的方法,例如仅在非英语国家设置排序规则为uft8_bin?
这会影响来自英语国家的任何人吗?还是uft8_bin和uft8_general_ci的行为相同,但具有正确排序å、ö等字符的额外优势?
还是有比uft8_bin更好的选择吗?
1个回答

2

utf8_general_ci 可以正确排序 å 和 ö。 utf8_*_ciutf8_bin 字符集的区别在于前者是不区分大小写


感谢您的快速回复。如果您不知道,在挪威,字母ä在字母z之后。但是使用utf8_general_ci,它会将ä与其他a放在一起。这里是一个SQL Fiddle示例http://sqlfiddle.com/#!2/9572e/1。 - Ben Sinclair
@BenSinclair: utf8_general_ci 是一种通用的不区分大小写的排序方式。我正在尝试找到完整的列表,但如果你有像phpMyAdmin这样的工具,可以选择一个挪威特定的 utf8_*_ci 排序方式。 - Ry-
@BenSinclair: 这里有 icelandic, latvian, romanian, polish, estonian, spanish, swedish, turkish, czech, danish, lithuanian, slovak, roman, persian, esperanto, hungarian, and sinhala. - Ry-
@BenSinclair:但是要点在于,如果你一开始就不想要大小写不敏感,那么请毫不犹豫地选择utf8_bin :) 如果你需要的话,只需将其更改为utf8_danish_ci即可。 - Ry-
1
再次感谢 :) 如果涉及到这些问题时我有点笨,对不起。作为一个“多租户”网站,为了使字母按照所使用的语言正确排序,最好的选择是什么?我之前只是使用了utf8_general_ci,因为那是我当时所知道的,现在我想从现在开始做正确的事情,以便所有语言都能正常显示。也许可以根据他们的语言在每个SQL语句中运行COLLATE?http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html - Ben Sinclair
@BenSinclair:我不知道 :) 如果每个语句中的COLLATE起作用,那就使用它!但是我认为utf8_general_ci应该是“一刀切”的排序规则,所以如果它不起作用,我不认为在这方面有更好的选择。 - Ry-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接