混合字符集和排序规则

时间:2014-07-03 20:13:35

标签: mysql character-encoding collation

我正在设置一个新的MySQL数据库,并通过提供给我的默认设置,我惊讶地发现它使用了各种字符集/排序规则。

SHOW VARIABLES LIKE '%character_set%';
SHOW VARIABLES LIKE '%collation%';

产生

________________________________________________
|                          |                   |
| character_set_client     | latin1            |
| character_set_connection | latin1            |
| character_set_database   | utf8              |
| character_set_server     | latin1            |
| character_set_system     | utf8              |
| collation_connection     | latin1_swedish_ci |
| collation_database       | utf8_general_ci   |
| collation_server         | latin1_swedish_ci |
|______________________________________________|

在这些设置中组合使用latin1和utf8会有风险吗?我一直认为,通过在任何地方使用相同的(最好是UTF-8 / Unicode),可以避免潜在的问题。

1 个答案:

答案 0 :(得分:4)

是的,你可能会遇到混合字符集的麻烦,清理它会很痛苦。风险在于您将使用latin1编码声明一个表,并且某些应用程序将尝试在其中存储utf8代码。结果很乱。

如果发生这种情况,请阅读http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/以获取控制数据的正确方法。如果这对您来说听起来有点复杂和危险,那么您就明白了! : - /

但首先避免混乱要好得多。从第一天开始就到处使用utf8。如果您需要支持所有亚洲语言,请使用utf8mb4

例外:如果你知道永远不需要存储国际符号的字符串,例如一串十六进制数字,那么你可以为MySQL表中的各列声明字符集ascii

但是使用utf8作为数据库和表级别的默认值,以及MySQL连接以及应用程序,Apache,HTTP等的默认值。