我在 Percona XtraDB 设置中为 utf8mb4 和 utf8 字符集设置默认排序规则时遇到问题。如果我写这样的查询:
SET @ue = 'test@email.com';
SET @u = (SELECT u.ID FROM db.users u
WHERE u.user_email = @ue);
它失败并显示以下消息:
/* SQL Error (1267): Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '=' */
这似乎是因为collat ion_connection会话值始终设置为 utf8mb4_general_ci。该变量的全局值是utf8_unicode_ci,这仍然不太正确,但更可取。
我终生无法找到该会话变量的来源。我查看了information_schema.COLLATIONS内部,可以看到utf8_general_ci和utf8mb4_general_ci如下:
--------------------------------------------------------
| COLLATION_NAME | CHARACTER_SET_NAME | IS_DEFAULT |
--------------------------------------------------------
| utf8_general_ci | utf8 | Yes |
--------------------------------------------------------
| utf8mb4_general_ci | utf8mb4 | Yes |
--------------------------------------------------------
然而我真的不希望这些排序规则作为默认值?
我尝试将这些值放在每个节点my.cnf
文件中,但似乎没有任何影响:
[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
非常感谢任何帮助。