ホームページ  >  記事  >  php教程  >  PHP-MYSQLの中国語文字化け問題。

PHP-MYSQLの中国語文字化け問題。

WBOY
WBOYオリジナル
2016-07-09 09:09:51856ブラウズ

MySQL 4.1 から多言語サポートが導入されましたが、PHP を使用して挿入された中国語の文字は、どのエンコーディングを使用しても文字化けして表示されません。

この問題を解決するのは実際には非常に簡単です。

1. テーブルを作成するときに、エンコードタイプを gb2312_chinese_ci.

に設定します。

2. PHP ページのデータベース接続ステートメントに行 mysql_query("SET NAMES 'gb2312'",$link); を追加します。

$db_host="ローカルホスト"; $db_password="パスワード";

$link=mysql_connect($db_host,$db_user,$db_password);
mysql_query("SET NAMES 'gb2312'",$link);

$db=mysql_select_db($db_name,$link); query="ユーザーから * を選択"

$result=mysql_query($query); この行を書き込みページと読み込みページの両方に追加すると、MYSQL の中国語が正常に表示されます。
関連情報:

MySQL 4.1 から多言語サポートが導入され、いくつかの機能は他のデータベース システムを上回っています。
MySQL 4.1 の文字セット サポート (文字セット サポート) には 2 つの側面があります。 文字セット (文字セット サポート) セット)とソート方法(照合順序)。文字セットのサポートは 4 つのレベルに細分化されています。 サーバー、データベース、テーブル、接続。
システムの文字セットとソート設定を表示するには、次の 2 つのコマンドを使用できます:!
mysql> show variables like 'character_set_%';

+---------------- - --------+--------------------------+

| 値 |+-- -- -----------------------+----------------------- -- -+| 文字セット_接続 |

| 文字セット_サーバー |

| /usr/share/mys ql / charsets/ |+--------------------------+---------------- -- --------+セット内の 7 行 (0.00 秒)

mysql> 'collat​​ion_%' のような変数を表示します;+---------------- --- ---+-------------------+
| 値 |
+-------------- --- ----+-------------------+
| 照合_データベース | latin1_swedish_ci |
+-- ----+-------------------+
セット内の 3 行 (0.00 秒)
値上記はシステムのデフォルト値です。 (システムがデフォルトでスウェーデン語のソート方法 latin1 に設定されているのは不思議です)...
本来の方法で PHP 経由で MySQL データベースにアクセスすると、テーブルのデフォルトの文字セットが utf8 に設定されていてクエリが送信されても​​、 UTF-8 エンコードを使用しても、データベースに保存されているデータが依然として文字化けしていることがわかります。問題はこの接続層にあります。解決策は、クエリを送信する前に次の文を実行することです:
set names 'utf8';
setcharacter_set_client = utf8;
setcharacter_set_connection =
set; Collat​​ion_connection = utf8_general_ci
作成者 デフォルトの Web ページで送信されたクエリは gb2312 (フォーム ページのメタで確認できます) で、mysql はデフォルトでそれを utf8 として扱います ( Character_set_client=utf8) なので、文字化けしているはずです。同様に、mysql から返された結果は次のように変換されます。 Character_set_results はエンコードされます (テーブルのエンコードに関係なく) デフォルトは utf8 であり、Web ページはそれを gb2312 として扱うため、データによって生成されたタイトルやその他のデータが存在する必要があります。 ライブラリによって読み取られたフィールドは文字化けしますが、他の PHP テキストは文字化けしません。

解決策 (Yi Jian Piaoxue による):
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」を送信し、中国語も正しく表示できるメモ帳のデフォルトの ansi として php ファイルを保存する必要があります

しかし、それはできません。接続するたびにSET NAMES 'utf8'を送信してください。それを完全に解決する方法は見つかりませんでした。

この方法で mysql をインストールするときにデフォルトの文字セットとして utf8 を選択すると、command.exe で mysql コンソールに入ると、クエリ結果が文字化けします。クエリを実行する前に
mysql>set 名を入力します。 ;
または
mysql>set names 'gb2312';
は、mysql クライアントに gb2312 文字セットを使用するように指示することと同等であり、結果は gb2312 が GBK のサブセットになります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。