4

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 でエンコードされていませんか、それともデータベースはそれを信じていませんか? これを修正するために何をする必要がありますか?

4

1 に答える 1

3

Try running this query right after you connect:

SET NAMES UTF8

Your database needs to store the data as UTF8, and your web page header should also have a UTF8 declaration, but your connection to the database also needs to use UTF8. You can run that on the command line and/or through PHPMyAdmin. All communication after that "query" will then be UTF8 encoded.

于 2011-08-22T01:41:19.940 に答える