“非法混合排序规则”错误与 phpMyAdmin 的库存安装

问题描述

问题

我有一个 Debian 11 的库存安装(测试)和一个全新安装的 MariaDB (10.5.9-MariaDB-1)、PHPMyAdmin (5.0.4deb2) 和 Lighttpd (1.4.59)。添加用户登录后,单击任何数据库和权限选项卡呈现以下错误

#1267 - Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation '<>'

我的问题:

Debian 会在某个时候解决这个问题,但在短期内是否有全局整理设置来修复这个错误

“正确”的整理通常是一场圣战。我想要一些合理的东西,并且在我可以更详细地查看排序规则之前它会起作用。

更多错误详情

当您单击权限选项卡时,由 PHPMyAdmin 本身生成查询会发生此错误。下面重现了生成错误查询。该查询似乎合并了仅来自 MysqL 数据库的“db”表和“user” viee 中的数据,后者从“global_priv”中提取数据

未对库存的 MariaDB 排序规则进行任何更改。认情况下,MariaDB 的内部 MysqL 数据库表本身似乎是一堆乱七八糟的排序规则。

表格大多是 utf8_bin,但也有一些 utf8_general_ci 甚至一个 latin1_swedish_ci。表中的列也是类似的乱七八糟的,有些采用表的认排序规则,有些专门设置为 utf8_general_ci 和 utf8mb4_bin。 MysqL.db 和 MysqL.global_priv 都是 utf8_bin,但是 global_priv ix utf8mb4_bin 中的一列和 MysqL.db 中的许多列都是 utf8_general_ci。

查询生成错误

( SELECT `User`,`Host`,`Select_priv`,`Insert_priv`,`Update_priv`,`Delete_priv`,`Create_priv`,`Drop_priv`,`Grant_priv`,`Index_priv`,`Alter_priv`,`References_priv`,`Create_tmp_table_priv`,`Lock_tables_priv`,`Create_view_priv`,`Show_view_priv`,`Create_routine_priv`,`Alter_routine_priv`,`Execute_priv`,`Event_priv`,`Trigger_priv`,'*' AS `Db`,'g' AS `Type` FROM
 `MysqL`.`user` WHERE NOT (`Select_priv` = 'N' AND `Insert_priv` = 'N' AND `Update_priv` = 'N' AND
 `Delete_priv` = 'N' AND `Create_priv` = 'N' AND `Drop_priv` = 'N' AND `Grant_priv` = 'N' AND
 `References_priv` = 'N' AND `Create_tmp_table_priv` = 'N' AND `Lock_tables_priv` = 'N' AND
 `Create_view_priv` = 'N' AND `Show_view_priv` = 'N' AND `Create_routine_priv` = 'N' AND
 `Alter_routine_priv` = 'N' AND `Execute_priv` = 'N' AND `Event_priv` = 'N' AND `Trigger_priv` =
 'N')) UNION ( SELECT `User`,`Db`,'d' AS `Type` FROM `MysqL`.`db` WHERE 'PHPmyadmin' LIKE `Db`     AND NOT (`Select_priv` = 'N' AND
 `Insert_priv` = 'N' AND `Update_priv` = 'N' AND `Delete_priv` = 'N' AND `Create_priv` = 'N' AND
 `Drop_priv` = 'N' AND `Grant_priv` = 'N' AND `References_priv` = 'N' AND `Create_tmp_table_priv` =
 'N' AND `Lock_tables_priv` = 'N' AND `Create_view_priv` = 'N' AND `Show_view_priv` = 'N' AND
 `Create_routine_priv` = 'N' AND `Alter_routine_priv` = 'N' AND `Execute_priv` = 'N' AND
 `Event_priv` = 'N' AND `Trigger_priv` = 'N')) ORDER BY `User` ASC,`Host` ASC,`Db` ASC;

解决方法

此问题是由 phpMyAdmin 的默认 collat​​ion_connection 设置为“utfmb4_unicode_ci”引起的,而 Debian 的默认 MariaDB 服务器排序规则为“utfmb4_general_ci”。不幸的是,MariaDB 查询和视图中的 unicode 和一般排序顺序不兼容。

每个登录 phpMyAdmin 的新用户都需要将 phpMyAdmin 主菜单中的连接排序规则更改为与 utfmb4_general_ci 兼容的内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...