在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 '=' */
这似乎是因为排序规则连接会话值总是设置为utf8mb4\u general\u ci。该变量的全局值是utf8\u unicode\u ci,这仍然不太正确,但更可取。
我一辈子都找不到会话变量的来源。我查看了inside information\u schema.collations,可以看到utf8\u general\u ci和utf8mb4\u general\u 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
非常感谢您的帮助。
暂无答案!
目前还没有任何答案,快来回答吧!