まず、データベースで使用されているエンコーディングが UTF-8 であると仮定します。このとき、まず
つまり、Webページに保存されているエンコードタイプ、Webページのcharset=utf-8、実行されるset names utf8ステートメントのエンコード方法は一致している必要があります
優れた分析を以下に引用します
MySQL "SET NAMES x" 文字セットの問題分析
最近、BBT から投票システムを構築するためのトレーニングを受けました。システムコードは難しくありませんが、主に文字セットとエンコーディングの勉強に時間を費やしました。 MySQL と Apache システムのエンコーディング (文字セット) の問題により、私は頭を悩ませ、非常に苦しみました。インターネット上のこれらの問題に対する解決策は散在しており、そのほとんどは理由を説明せずに解決策を提供しています。そこで、後発者が再び寄り道をしないように、ここ数日で得たことをまとめておきます。この記事は、PHP を作成するのに少し役立ちます (これを読むと、ほとんどのスペース プロバイダーのサーバーで PHP プログラムを正常に表示する方法がわかります) が、ネットワーク サーバーの確立と設定にはさらに役立ちます。
まず、MySQL の文字セットについて話しましょう。 Windows では、my.ini の
を変更できます。1.# クライアントセクション
2.[mysql]
3.default-character-set=utf8
4.# サーバーセクション
5.[mysqld]
6.default-character-set=utf8
これら 2 つのフィールドは、データベースのデフォルトの文字セットを変更するために使用されます。 1 つ目はクライアントのデフォルトの文字セットで、2 つ目はサーバーのデフォルトの文字セットです。両方を utf8 に設定し、MySQL コマンド ライン クライアントで「show variables like "character_set_%";」と入力すると、次の文字が表示されます。
character_set_client latin1character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8
) を実行します。
1.mysql_query("SET NAMES UTF8");表示は正常になります(データベース内の情報の文字が正常であれば)。なぜこうなった? 「SET NAMES UTF8」というクエリは具体的に何をするのでしょうか?
MySQL コマンドラインに移動し、「SET NAMES UTF8;」と入力し、「show variebles like "character_set_%";」を実行すると、変数「character_set_client」、「character_set_connection」、および「character_set_results」の値が表示されることを確認します。元々は latin1 だったものはすべて utf8 に変更されました。これら 3 つの変数が問題を引き起こしていることがわかりました。マニュアルを確認してください。上記の文は次と同等です:
1.SET 文字セットクライアント = utf8;
2.SET 文字セット結果 = utf8;
3.SET 文字セット接続 = utf8;
情報入力パス: クライアント→接続→サーバー;
情報出力パス: サーバー→接続→結果。
ただし、「SET NAMES UTF8」の効果は一時的なものであり、MySQL は再起動後にデフォルトに戻ることをここで述べておく必要があります。
次のステップでは、サーバー上の MySQL の構成について説明します。データ送信のエンコーディングの一貫性を確保するために、データベースの読み取りと書き込みのたびに「SET NAMES UTF8」を追加する必要があるのではないでしょうか? 3 つの変数がデフォルトで必要な文字セットになるように MySQL を構成できますか?マニュアルにはそれが記載されておらず、オンラインで答えを見つけることができませんでした。したがって、サーバー構成の観点からは、そのコード行を省略する方法はありません。
概要: より多くのサーバーで Web ページが正常に表示されるようにするには、「SET NAMES UTF8」を追加しなくても、通常どおりアクセスできます。