ホームページ >バックエンド開発 >PHPチュートリアル >PHP+MYSQL 中国語文字化け問題、_PHP チュートリアル
MySQL 4.1 から多言語サポートが導入されましたが、PHP を使用して挿入された中国語文字は、どのエンコーディングを使用しても文字化けして表示されます。
この問題を解決するのは実際には非常に簡単です。
1. テーブルを作成するときに、エンコードタイプを gb2312_chinese_ci に設定します。
2. たとえば、PHP ページのデータベース接続ステートメントに行 mysql_query("SET NAMES 'gb2312'",$link); を追加します。 リーリーこの行を書き込みページと読み込みページの両方に追加すると、MYSQL の漢字が正常に表示されるようになります。
関連情報:MySQL 4.1 から多言語サポートが導入され、いくつかの機能は他のデータベース システムを上回っています。
MySQL4.1 の文字セットサポート (Character Set Support) には、文字セット (Characterset) とソート方法 (Collation) の 2 つの側面があります。文字セットのサポートは、サーバー、データベース、テーブル、接続の 4 つのレベルに細分化されています。
システムの文字セットと並べ替え設定を表示するには、次の 2 つのコマンドを使用できます: !
リーリー
上記の値はシステムのデフォルト値です。 (なぜシステムがデフォルトで latin1 スウェーデン語の並べ替え方法を使用するのか不思議です)...
元の方法で PHP を介して MySQL データベースにアクセスすると、テーブルのデフォルトの文字セットを utf8 に設定し、UTF-8 エンコードでクエリを送信したとしても、データベースに格納されているデータは依然として文字化けしていることがわかります。問題はこの接続層にあります。解決策は、クエリを送信する前に次の文を実行することです:
これは、次の 4 つの命令と同等です:
コードは次のとおりです:
setcharacter_set_client = utf8;
setcharacter_set_results = utf8;
setcharacter_set_connection = utf8;
set Collation_connection = utf8_general_ci
デフォルトのWebページによって送信されたクエリはgb2312(フォームページのメタで確認できます)であり、mysqlはデフォルトでそれをutf8として扱うため(この時点でcharacter_set_client=utf8を確認できます)、文字化けしているはずです。同様に、mysql によって返される結果は、character_set_results エンコーディングに変換されます (テーブルのエンコーディングとは関係ありません)。デフォルトは utf8 で、Web ページはそれを gb2312 として扱うため、次のようなフィールドが必要です。データベースから読み取られたタイトルは文字化けしますが、他の PHP 部分のテキストは文字化けしません。
mysql5.0をインストールするときは、utf8文字セットを選択する必要があります(phpmyadminでデータベースやフィールドを作成するときはutf8文字セットを選択する必要はありません)、phpが接続を確立した後に送信します
コードは次のとおりです:
$link = mysql_connect('localhost', 'root', 'root');
mysql_query("SET NAMES 'utf8'",$link);
現時点では、Web ページに表示される内容はまだ文字化けしていますが、Web ページのソース ファイルを確認すると、もう ???? ではありません。 php ソース ファイルをメモ帳で開き、utf8 エンコードとして保存せず、Web ページを更新すればすべて完了です。
または、もちろん、インストール時に utf8 をインストールし、php でセット名「gb2312」を送信し、php ファイルをメモ帳のデフォルトの ansi として保存する必要があります。これにより中国語も正しく表示されます。
しかし、接続するたびにSET NAMES 'utf8'を送信することはできません。それを完全に解決する方法は見つかりませんでした。
。
コードをコピーします コードは次のとおりです:
mysql>名前を「gbk」に設定します;
または
コードは次のとおりです:
mysql>名前を設定 'gb2312';
これは、mysql クライアントに gb2312 文字セットを使用するように指示することと同等であり、結果は gb2312 が GBK のサブセットになります。