PHPを使用してMySQLデータベースの中国語の文字化けクエリを解決するにはどうすればよいですか?

Guanhui
リリース: 2023-03-02 21:06:01
オリジナル
2850 人が閲覧しました

PHPを使用してMySQLデータベースの中国語の文字化けクエリを解決するにはどうすればよいですか?

#MySQL データベースにクエリを実行するときに、PHP は中国語の文字化けをどのように解決しますか?

1. MySQL データベースのデフォルトのエンコーディングは UTF-8 です;

2. MySQL でテーブルを作成するときは、文字セットを UTF-8 に設定します;

3. PHP でデータをクエリする前に、データベースのエンコードを UTF-8 に設定します。

MySQL "SET NAMES x" 文字セットの問題分析

私は最近、BBT から投票システムを構築するためのトレーニングを受けました。システムコードは難しくありませんが、主に文字セットとエンコーディングの勉強に時間を費やしました。 MySQL と Apache システムのエンコーディング (文字セット) の問題により、私は頭を悩ませ、非常に苦しみました。インターネット上のこれらの問題に対する解決策は散在しており、一方的であり、そのほとんどは理由を説明せずに解決策を提供しています。そこで、後発者が再び寄り道をしないように、ここ数日で得たことをまとめておきます。この記事は、PHP の作成には少し役立ちます (これを読むと、ほとんどのスペース プロバイダーのサーバーで PHP プログラムを正常に表示する方法がわかります) が、ネットワーク サーバーの確立と設定にさらに役立ちます。

まず、MySQL の文字セットについて話しましょう。 Windows では、my.ini の 2 つのフィールド

# CLIENT SECTION
[mysql]
default-character-set=utf8
# SERVER SECTION
[mysqld]
default-character-set=utf8
ログイン後にコピー

を変更することで、データベースのデフォルトの文字セットを変更できます。 1 つ目はクライアントのデフォルトの文字セットで、2 つ目はサーバーのデフォルトの文字セットです。両方を utf8 に設定し、MySQL コマンド ライン クライアントで「show variebles 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 の

mysql_query("SET NAMES UTF8");
ログイン後にコピー

を実行すると、表示されます。 (データベース情報内の文字が正常である限り) は正常です。なぜこうなった? 「SET NAMES UTF8」というクエリは具体的に何をするのでしょうか?

MySQL コマンド ラインに移動して「SET NAMES UTF8;」と入力し、「show variables like "character_set_%";」を実行すると、変数「character_set_client」、「character_set_connection」、および「character_set_results」が元々は latin1 だった値がすべて utf8 に変更されており、これら 3 つの変数が問題を引き起こしていることがわかりました。マニュアルを参照してください。上記の文は次のとおりです:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
ログイン後にコピー

これら 3 つの変数の機能を確認してください:

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

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

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

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

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

推奨チュートリアル: 「PHP」「MySQL チュートリアル

以上がPHPを使用してMySQLデータベースの中国語の文字化けクエリを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート