要するに、これはこれまでに何千回も議論されてきたからです:
- PHPは、
"漢字"などの文字列を保持します 、UTF-8でエンコードされています。このためのバイトはE6 BC A2 E5 AD 97です。 。 - この文字列は、
latin1に設定されているデータベース接続を介して送信されます 。 - データベースはバイトを受信します
E6 BC A2 E5 AD 97、それらがlatin1を表すと考える 文字。 - データベースには文字
æ¼¢åが保存されます (E6 BC A2 E5 AD 97の文字latin1にマップします 。 - 同じプロセスを逆にすると、PHPは同じバイトを受け取り、UTF-8として扱います。データベースが文字を適切に処理しない場合でも、ラウンドトリップはPHPでは正常に機能します。
したがって、ここでの問題は、データがデータベースに入力されたときにデータベース接続が正しく設定されていないことでした。データベース内のデータを正しい文字に変換する必要があります。これを試してください:
SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
多分utf8 ここで必要なものではありません、実験してください。それが機能する場合は、これをUPDATEに変更します データを永続的に更新するステートメント。