ホームページ  >  記事  >  バックエンド開発  >  MySQL クエリへの PHP 接続の結果に文字化けした中国語が表示される solution_PHP チュートリアル

MySQL クエリへの PHP 接続の結果に文字化けした中国語が表示される solution_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:25:55885ブラウズ

まず、データベースで使用されているエンコーディングが UTF-8 であると仮定します。このとき、まず

コードをコピー を PHP ページに追加する必要があります。コードは次のとおりです:


ここでの charset の値 (utf-8) は、ファイルを保存するときのエンコード タイプと同じである必要があります
次に、データベースクエリの前に


コードをコピーを追加します。コードは次のとおりです:
mysql_query("set names 'utf8'");


このステートメント行のエンコード値も、上記のエンコード値と同じである必要があります。

つまり、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 latin1

character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8

utf8 は上記の設定で変更されます。このとき、UTF-8を使用してPHPプログラムでデータベースからデータを読み込むと、「?????」などの文字化けが発生する可能性があります。長時間オンラインで検索した後の解決策は簡単です。データベースに接続した後、データを読み取る前に、まずクエリ「SET NAMES UTF8」(PHP では

) を実行します。

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;

これら 3 つの変数の関数を見てください:

情報入力パス: クライアント→接続→サーバー;

情報出力パス: サーバー→接続→結果。

言い換えれば、各パスは文字セットのエンコーディングを 3 回変更する必要があります。サーバー内の文字化けした出力を例に挙げると、受信接続は latin1 に変換され、受信結果は latin1 に変換され、utf-8 ページで結果が再度変換されます。 latin1 と utf8 など、2 つの文字セットに互換性がない場合、変換プロセスは元に戻すことができず、破壊的なものになります。したがって、後戻りはできません。

ただし、「SET NAMES UTF8」の効果は一時的なものであり、MySQL は再起動後にデフォルトに戻ることをここで述べておく必要があります。

次のステップでは、サーバー上の MySQL の構成について説明します。データ送信のエンコーディングの一貫性を確保するために、データベースの読み取りと書き込みのたびに「SET NAMES UTF8」を追加する必要があるのではないでしょうか? 3 つの変数がデフォルトで必要な文字セットになるように MySQL を構成できますか?マニュアルにはそれが記載されておらず、オンラインで答えを見つけることができませんでした。したがって、サーバー構成の観点からは、そのコード行を省略する方法はありません。

概要: より多くのサーバーで Web ページが正常に表示されるようにするには、「SET NAMES UTF8」を追加しなくても、通常どおりアクセスできます。

http://www.bkjia.com/PHPjc/824862.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/824862.html技術記事まず、データベースで使用されているエンコーディングが UTF-8 であると仮定します。次に、次のようにコピー コードを PHP ページに追加する必要があります。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。