環境:
データベースのバージョン MySQL 8.0.32
エラーが報告されました:
データをクエリすると次のエラーが返されます
"(1267, \"操作 '=' の照合順序 (utf8mb4_general_ci,IMPLICIT) と (utf8mb4_0900_ai_ci,IMPLICIT) の組み合わせが不正です\")"
エラー分析と初期解決プロセス:
このエラーは、クエリまたは比較操作を実行するときに、異なる文字セットを持つテーブルまたはフィールド間の比較が含まれ、その結果、文字セットの競合が発生するために発生します。
utf8mb4_general_ci はプログラムに必要なソート ルールであるため、初期段階では utf8mb4_0900_ai_ci を含むデータベース、データ テーブル、およびフィールドのソート ルールを一律 utf8mb4_general_ci に変更しようとしました。
ただし、並べ替えルールを utf8mb4_general_ci に変更すると、次のようなエラーが発生します。
#3780 - 外部キー制約 'django_admin_log_user_id_c564eba6_fk_lyadmin_users_id' の参照列 'user_id' と参照される列 'id' に互換性がありません。
外部キー フィールドの照合順序は utf8mb4_0900_ai_ci であるため、外部キー フィールドの照合順序を utf8mb4_general_ci に変更することはできません。多くの方法を試しましたが、うまくいかなかったり、欠点があります。
最終的解決:
データベース、データテーブル、フィールドのソートルールをutf8mb4_general_ciからutf8mb4_0900_ai_ciに一律変更したことで問題は解決しました。
その理由は次のとおりです。
MySQL 8.0以降、デフォルトの照合順序は以前のバージョンのような utf8mb4_general_ci ではなくなり、 utf8mb4_0900_ai_ci に更新されました。
データテーブルとフィールドの並べ替えルールをバッチで視覚的に変更する方法:
「phpMyAdmin」と入力します(私が使用しているバージョンはphpMyAdmin 5.2です)
1. 変更するデータベースをクリックします。
2. 右側の操作メニューをクリックします
3. ページの下部にある並べ替えルールを見つけて、並べ替えルールを設定します。
4. [実行] をクリックします (この操作により、データベース、すべてのデータ テーブル、およびすべてのフィールドの並べ替えルールがバッチ変更されます)。
補足: テーブルとテーブルフィールドのソートルールを個別に変更したい場合は、テーブルを変更してから操作メニューをクリックし、アイコンに従ってください。
参考記事:
この友人の記事を読んでいてふと気づいたので、お礼としてリンクを貼らせていただきました。