要するに、これはこれまでに何千回も議論されてきたからです:
- 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
に変更します データを永続的に更新するステートメント。