我收到此错误;
操作“=”时非法混合排序规则 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT)
我将“排序规则”更改为“utf8mb4_unicode_ci”。然后表被截断,我再次重新导入行。但仍然出现同样的错误
我猜您要加入的表上有不同的排序规则。它表示您在操作中使用了非法的排序规则组合
=
。
所以需要设置排序规则。 例如:
WHERE tableA.field COLLATE utf8mb4_general_ci = tableB.field
然后您在
=
操作上设置了相同的排序规则。
由于您没有提供有关表格的更多信息,这是我可以提供的最好的伪代码。
对于连接查询,我使用这段查询来解决此类错误:
select * from contacts.employees INNER JOIN contacts.sme_info
ON employees.login COLLATE utf8mb4_unicode_ci = sme_info.login
之前使用以下查询时,我遇到了相同的错误:
select * from contacts.employees LEFT OUTER JOIN contacts.sme_info
ON employees.login = sme_info.login
Error: Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
我对排序规则了解不多,但似乎两个表都遵循不同的字符集规则。因此,等于运算符无法执行。因此,在第一个查询中,我指定了一个排序规则集来收集和组合。
-- 这对我有用
SET collation_connection = 'utf8mb4_general_ci';
ALTER DATABASE your_bd CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
几个小时后,我终于找到了一个对我有用的解决方案(使用 phpMyAdmin)。
请记住在执行这些操作之前先备份数据库。
我也查过
*更改所有表格排序规则
*更改所有表 列排序规则
我认为这不是 100% 必要的,但重新启动 mySQL/MariaDb 服务 + 断开并重新连接到数据库也是一个好主意。
补充说明: 我必须使用 utf8mb4_general_ci 因为使用 utf8mb4_unicode_ci (我本来想使用)时问题仍然存在
有关更多信息、命令行查询和插图示例,我推荐这篇文章:https://mediatemple.net/community/products/dv/204403914/default-mysql-character-set-and-collation
用
charset=utf8mb4
检查连接
'dsn' => 'mysql:dbname=DatabaseName;host=localhost;charset=utf8mb4';
问题是两个表都有相同的列, 为了解决这个问题,我们需要更改表和数据库
ALTER DATABASE 数据库名称 字符集 utf8mb4 COLLATE utf8mb4_unicode_ci;
更改表 tabel1 转换为字符集 utf8mb4 整理 utf8mb4_unicode_ci;
更改表 tabel2 转换为字符集 utf8mb4 整理 utf8mb4_unicode_ci;
首先,检查一下你的表和数据库的排序规则,如果不同就让它相似。
如果您在存储过程中遇到错误,请首先检查数据库的排序规则和进行相等操作的列,如果它们不同,请将列排序规则更改为您的数据库,然后您必须重新创建通过删除该存储过程。
如果您正在使用触发器或者您能够删除导致错误的表 删除触发器或表并运行: 将database_name替换为您的数据库名称,并将排序规则替换为您要使用的排序规则
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后再次创建触发器或您有问题的表