PHP+MYSQLの中国語文字化け問題
この記事は主にPHP+MYSQLの中国語文字化け問題を解決するためのいくつかの方法をまとめて紹介します。非常に実用的で、困っている友達は参考にしてください。
MySQL 4.1 から多言語サポートが導入されましたが、PHP を使用して挿入された中国語文字は、どのエンコーディングを使用しても文字化けして表示されます。
この問題の解決策は実はとても簡単です
1.テーブル作成時にエンコードタイプをgb2312_chinese_ciに設定します
2. たとえば、PHP ページのデータベース接続ステートメントに mysql_query("SET NAMES 'gb2312'",$link); という行を追加します。
?
1
2
3
4
5
6
7
8
9
10
|
$db_host="ローカルホスト";
$db_user="ルート";
$db_password="パスワード";
$db_name="テスト";
$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の文字セットサポートには、文字セット(Characterset)とソート方法(Collation)の2つの側面があります。文字セットのサポートは、サーバー、データベース、テーブル、接続の 4 つのレベルに細分化されています。
システムの文字セットと並べ替え設定を表示するには、次の 2 つのコマンドを使用できます:!
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| mysql> 'character_set_%' のような変数を表示します;
+--------------------------+---------- -----+
| 変数名 |
+--------------------------+---------- -----+
| 文字セットクライアント |
| 文字セット接続 |
| 文字セットデータベース |
| 文字セットの結果 |
| 文字セットサーバー |
| 文字セットシステム |
| 文字セットディレクトリ /usr/share/mysql/charsets/ |
+--------------------------+---------- -----+
7 行セット (0.00 秒)
mysql> 'collation_%' のような変数を表示します;
+----------------------+-------------------+
| 変数名 |
+----------------------+-------------------+
| 照合_接続 |
| 照合データベース |
| 照合サーバー |
+----------------------+-------------------+
3行セット(0.00秒)
|
上記の値はシステムのデフォルト値です。 (なぜシステムがデフォルトで latin1 スウェーデン語の並べ替え方法を使用するのか不思議です)...
元の方法で PHP 経由で MySQL データベースにアクセスすると、テーブルのデフォルトの文字セットを utf8 に設定し、UTF-8 エンコードでクエリを送信したとしても、データベースに保存されているデータは依然として文字化けしていることがわかります。 。問題はこの接続層にあります。解決策は、クエリを送信する前に次の文を実行することです:
名前を「utf8」に設定します;
以下の4つの命令に相当します。
コードは次のとおりです:
setcharacter_set_client = utf8;
setcharacter_set_results = utf8;
setcharacter_set_connection = utf8;
collation_connection = utf8_general_ciを設定します
デフォルトのWebページによって送信されたクエリはgb2312(フォームページのメタで確認できます)であり、mysqlはデフォルトでそれをutf8として扱うため(この時点でcharacter_set_client=utf8を確認できます)、文字化けしているはずです。同様に、mysql によって返される結果は、character_set_results エンコーディングに変換されます (テーブルのエンコーディングとは関係ありません)。デフォルトは utf8 で、Web ページはそれを gb2312 として扱うため、次のようなフィールドが必要です。データベースから読み取られたタイトルは文字化けしますが、他の PHP 部分のテキストは文字化けしません。
解決策 (Yijian 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」を送信し、php ファイルをメモ帳のデフォルトの ansi として保存します。これにより、中国語も正しく表示されます。
しかし、接続するたびにSET NAMES 'utf8'を送信することはできません、それを完全に解決する方法は見つかりませんでした。
この方法で mysql をインストールすると、デフォルトの文字セットが utf8 として選択されるため、command.exe で mysql コンソールに入ると、クエリ結果が文字化けしてしまいます。
コードは以下の通りです:
mysql>set names 'gbk';
または
コードをコピーします。コードは次のとおりです:
mysql>set names 'gb2312';
これは、mysql クライアントに gb2312 文字セットを使用するように指示するのと同じであり、結果は gb2312 が GBK のサブセットになります。
http://www.bkjia.com/PHPjc/1025312.htmlwww.bkjia.com
本当http://www.bkjia.com/PHPjc/1025312.html技術記事この記事は主に、PHP+MYSQL の中国語文字化け問題を解決するためのいくつかの方法をまとめて紹介します。非常に実用的で、困っている友人は参考にしてください。 MySQL 4 から...