私はこれに対する答えを数時間探していましたが、まだカバーされていないようです。できるだけ簡潔にしようと思います。
いくつかの文字エンコードの問題があるWebアプリを実行しているクライアントがあります。詳細:
- CentOS 6.3
- MySQLサーバー5.1.67
- すべてのテーブルがUTF-8に設定されています
- SHOW FULL COLUMNSは、各テーブルのすべてのテキスト列がUTF-8であることも確認します
- データベースに入るデータはUTF-8です
- データはUTF-8としてWebクライアントに提供されます
- 出力データに不正な文字はありません。ブラウザをLatin1に強制すると、あらゆる種類の問題が発生します
つまり、基本的にすべてがUTF-8であり、すべてが完全に機能しています。
ただし...MySQLへのすべての接続はLatin1である必要があります。そうでない場合、システム全体が崩壊します。これは、コンソールのMySQLクライアント、PHP / MySQL、PHP / MySQL、およびRuby mysqlgemv2.8.1で確認しました。「SETNAMESutf8」のようなコマンドを発行するか、さまざまなAPIメソッドを使用して接続文字セットをUTF-8に変更すると、すべてのマルチバイト文字が文字化けして認識できなくなります。
現時点では、サーバーへのLatin1接続の使用がUbuntuテスト環境でまったく機能しないことを除いて、ここでは大きな問題はありません。そのため、プログラムを本番環境に移行すると、プログラムが壊れ続けます。しかし、私は何かがおそらく正しくない可能性があり、それが戻ってきて後で私のクライアントを噛むだろうというしつこい感じがします。
MySQLは、サーバーへの最初の接続時にこれを報告しています。
character_set_client: latin1
character_set_connection: latin1
character_set_database: latin1
character_set_filesystem: binary
character_set_results: latin1
character_set_server: latin1
character_set_system: utf8
そして、これらはUTF-8データに対して機能する設定です。他のものをUTF-8に変更すると、マルチバイト文字は悲惨な死を遂げます。
ここで何が問題になっているのか、どこでより良いドキュメントを見つけることができるのか、誰かが知っているなら、それは非常にありがたいです。