MySQL の「不正な照合順序の組み合わせ」エラーのトラブルシューティング
大規模なデータセットは、MySQL のイライラする「照合順序の不正な組み合わせ」エラーを引き起こすことがあります。これは、一貫性のない文字セットと照合順序を持つデータを比較するときに発生します。
問題
次のクエリについて考えてみましょう:
<code class="language-sql">SELECT COUNT(*) AS num FROM keywords WHERE campaignId = '12' AND LCASE(keyword) = 'hello again 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€'</code>
これを実行すると、以下が生成される可能性があります:
<code>Error Number: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='</code>
解決策: 文字列のエスケープとエンコーディングの変更
これを修正するには、主に 2 つのアプローチがあります。問題のある文字列をエスケープするか、データベースとテーブルのエンコーディングを変更するです。
方法 1: 文字列のエスケープ (一時的な修正)
文字列をエスケープすると、一時的にエラーを回避できます:
<code class="language-sql">SET collation_connection = 'utf8_general_ci'; SELECT COUNT(*) AS num FROM keywords WHERE campaignId = '12' AND LCASE(keyword) = 'hello again \"昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€\"'</code>
ただし、これは応急処置的な解決策であり、将来的に問題が発生する可能性があります。
方法 2: データベースとテーブルのエンコーディングを変更する (永続的な解決策)
永続的な修正を行うには、utf8_general_ci
:
<code class="language-sql">ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;</code>
接続の照合順序とデータベース/テーブルのエンコーディングを utf8_general_ci
に統合することで、一貫したデータ処理が保証され、照合順序の不一致が排除されます。 これは推奨されるアプローチです。
以上がMySQL の「不正な照合順序の組み合わせ」エラーを修正する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。