簡體   English   中英

非法混合排序規則 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT) 用於操作 '='

[英]Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

我收到了這個錯誤;

非法混合排序規則 (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 '='

我對排序規則了解不多,但似乎兩個表都遵循不同的字符集規則。 因此,等於運算符無法執行。 所以在第一個查詢中,我指定了一個排序規則集來收集和組合。

檢查與charset=utf8mb4的連接

'dsn'       => 'mysql:dbname=DatabaseName;host=localhost;charset=utf8mb4';

幾個小時后,我終於找到了一個適合我的解決方案(使用 phpMyAdmin)。

請記住在執行這些操作之前先備份您的數據庫。

  1. 登錄到 phpMyAdmin。
  2. 從左側的列表中選擇您的數據庫。
  3. 單擊頂部選項卡中的“操作”。
  4. 在排序規則框中(靠近頁面底部),從下拉菜單中選擇新排序規則。

我也查了
*更改所有表格排序規則
*更改所有表格列排序規則

我認為這不是 100% 必要的,但重新啟動 mySQL/MariaDb 服務 + 斷開連接並重新連接到數據庫也是一個好主意。


附加說明:我不得不使用utf8mb4_general_ci ,因為在使用 utf8mb4_unicode_ci 時問題仍然存在(我最初想使用)

有關其他信息、命令行查詢和插圖示例,我推薦這篇文章: https ://mediatemple.net/community/products/dv/204403914/default-mysql-character-set-and-collat​​ion

有同樣的問題並通過更新字段的排序規則來修復它。

即使您更改表的排序規則,各個表字段仍具有舊的排序規則。 嘗試更改表並更新那些 varchar 字段

在此處查看示例

-- 這對我有用

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;

首先,檢查表和數據庫的排序規則,如果它們不同,則使其相似。

如果您在存儲過程中遇到錯誤,那么首先檢查您的數據庫的排序規則和您正在執行相同操作的列,如果它們不同,請將列排序規則更改為您的數據庫,然后您必須重新創建它通過刪除存儲過程。

問題是兩個表都有相同的列,為了克服這個問題,我們需要同時改變表和數據庫

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ALTER TABLE tabel1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ALTER TABLE tabel2 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM