データテーブル (utf8mb4_general_ci、utf8mb4_0900_ai_ci) 内の一貫性のないフィールド並べ替えルールによって発生するエラーと解決策が添付されています

環境:

データベースのバージョン 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. [実行] をクリックします (この操作により、データベース、すべてのデータ テーブル、およびすべてのフィールドの並べ替えルールがバッチ変更されます)。

 補足: テーブルとテーブルフィールドのソートルールを個別に変更したい場合は、テーブルを変更してから操作メニューをクリックし、アイコンに従ってください。

参考記事:

この友人の記事を読んでいてふと気づいたので、お礼としてリンクを貼らせていただきました。

MySQL は utf8mb4 を設定していますが、なぜ utf8mb4_general_ci と utf8mb4_0900_ai_ci があるのでしょうか? _utf8mb4_0900_as_ci_LINgZone2 のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/gtnes/article/details/131008410