1267: Illegal mix of collations(照合順序の不正な混在)
MySQL意味
比較または結合の操作 (JOIN、WHERE、UNION、CONCAT) で、照合順序の異なる 2 つの文字列が組み合わされ、MySQL はどの照合規則を適用すべきか判断できなかった。
原因
通常、文字セット/照合順序の異なる列の比較 (例: utf8mb4_general_ci と utf8mb4_unicode_ci、または latin1 と utf8mb4)、または列と接続の照合順序の不一致。テーブル/データベースが異なるデフォルトで作成された場合によく見られる。
対処方法
比較の両辺を同じ照合順序に揃える: COLLATE で明示的に照合順序を指定するか (例: col1 = col2 COLLATE utf8mb4_unicode_ci)、CONVERT(... USING ...) を使用する。恒久対策として、影響を受ける列/テーブルを一貫した単一の文字セットと照合順序に変換する。接続の照合順序 (collation_connection) も揃える。
同じデータベースの他の項目
- 3948Loading local data is disabled; this must be enabled on both the client and server sides(ローカルデータの読込みは無効。クライアントとサーバーの両側で有効化が必要)
- 1075Incorrect table definition; there can be only one auto column and it must be defined as a key(不正なテーブル定義。自動採番列は 1 つのみでキーとして定義が必要)
- 1055Expression not in GROUP BY (only_full_group_by)(GROUP BY にない式)
- 1030Got error N from storage engine(ストレージエンジンからエラー N を受け取った)
- 1197Multi-statement transaction required more than 'max_binlog_cache_size'(複数文トランザクションが 'max_binlog_cache_size' を超える領域を必要とした)
- 1785Statement violates GTID consistency(文が GTID 整合性に違反)
- 3024Query execution was interrupted, maximum statement execution time exceeded(最大文実行時間を超えたためクエリの実行が中断された)