まず、MySQL の文字セットについて話しましょう。 Windows では、my.ini の
PHP コード
を変更することで、コード をコピーできます。コードは次のとおりです:
[mysql]
default-character-set=utf8 //デフォルトの文字。クライアントのセット
[mysqld]
default-character-set=utf8 //サーバー側のデフォルトの文字セット
両方を utf8 に設定し、次に「show variables like "character_set_%";」と入力するとします。 MySQL コマンド ライン クライアントでは、次の文字が表示されます:
コードをコピー コードは次のとおりです:
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_results latin1サーバー utf8
character _set_system utf8
データベースからUTF-8のPHPプログラムを使用した場合 データを読み込むと「?????」などの文字化けが発生する可能性があります。
解決策は、データベースに接続した後、データを読み取る前にクエリ「SET NAMES UTF8」を実行することです。これは
mysql_query("SET NAMES UTF8");
//この文はデータベース サーバーの後に PHP に配置する必要があります。接続ステートメント [$c die("サーバーへの接続に失敗しました");] を実行すると、表示は正常になります (データベース内の情報の文字が正常であれば)。
MySQL コマンドラインに移動し、「SET NAMES UTF8;」と入力し、「show variebles like "character_set_%";」を実行すると、変数「character_set_client」、「character_set_connection」、および「character_set_results」の値が表示されることを確認します。元々は latin1 だったものはすべて utf8 に変更されました。これら 3 つの変数が問題を引き起こしていることがわかりました。
マニュアルを確認してください。上記の文は次と同等です:
SET Character_set_client = utf8;
SET Character_set_connection = utf8;
これら 3 つの変数の機能を確認してください:
情報入力パス: client→connection→server ;
情報出力パス: サーバー→接続→結果。
言い換えれば、各パスは文字セットのエンコーディングを 3 回変更する必要があります。サーバー内の文字化けした出力を例に挙げると、受信接続は latin1 に変換され、受信結果は latin1 に変換され、utf-8 ページで結果が再度変換されます。 latin1 と utf8 など、2 つの文字セットに互換性がない場合、変換プロセスは元に戻すことができず、破壊的なものになります。
ただし、「SET NAMES UTF8」の効果は一時的なものであり、MySQL は再起動後にデフォルトに戻ることをここで述べておく必要があります。
次のステップでは、サーバー上の MySQL の構成について説明します。データ送信のエンコーディングの一貫性を確保するために、データベースの読み取りと書き込みのたびに「SET NAMESUTF8」を追加する必要があるのではないでしょうか?これら 3 つの変数がデフォルトで必要な文字セットになるように MySQL を構成できますか?マニュアルにはそれが記載されておらず、オンラインで答えを見つけることができませんでした。したがって、サーバー構成の観点から、そのコード行を省略する方法はありません。
要約: より多くのサーバーで Web ページが正常に表示されるようにするには、「SET NAMES UTF8」を追加することをお勧めします。今この文を追加しなくても、通常どおりアクセスできます。
上記では、php が mysql の文字化けコードを読み込む問題を解決するためにセット名 XXX を使用する原則を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。