MySQL のすべてのデータを UTF8 でエンコードしたいと考えています。データベース、テーブル、および列のすべての文字セットと照合順序を UTF8 に設定しました。データベースに何かが書き込まれる前に、PHP で mb_detect_encoding を使用して、UTF8 かどうかを確認します。したがって、すべてのデータは UTF8 でエンコードされていると思います。
ただし、ここに問題があります。この単語 Ríkarðsdóttir を例にとると、データベースからクエリを実行し、UTF8 でエンコードされた Web ページで PHP を介して表示すると、正しく表示されます。この同じレコードを phpMyAdmin で照会すると、RÃkarðsdóttir が得られます。MySQL コマンド ラインを使用する場合も同様です。
Running SHOW VARIABLES returns to me:
character_set_client utf8,
character_set_connection utf8,
character_set_database utf8,
character_set_filesystem binary,
character_set_results utf8,
character_set_server latin1,
character_set_system utf8
サーバーのみが latin1 であり、私は共有ホスティング サイトにいて、それを変更できるとは思いません。それが問題でしょうか?
ここに私が理解していないことがあります: 私の UTF8 Web ページでは Ríkarðsdóttir が正しく表示されるのに、UTF8 でエンコードされた phpMyAdmin Web ページでは Ríkarðsdóttir として表示されるのはなぜですか? データは本当に UTF8 でエンコードされていませんか、それともデータベースはそれを信じていませんか? これを修正するために何をする必要がありますか?