MySQL 4.1 以降に導入された多言語サポートは非常に優れており、いくつかの機能は他のデータベース システムを上回っています。ただし、テスト中に、MySQL 4.1 より前の MySQL に該当する PHP ステートメントを使用して MySQL データベースを操作すると、テーブルの文字セットが設定されていても文字化けが発生することがわかりました。
MySQL 4.1の文字セットサポート(Character Set Support)には、文字セット(Character set)とソート方法(Collation)の2つの側面があります。文字セットのサポートは、サーバー、データベース、テーブル、接続の 4 つのレベルに細分化されています。
システムの文字セットとソート設定を表示するには、次の 2 つのコマンドを使用できます:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+------------- -- ----------+----------------------------+
| 変数名 |
+ ------------------------+--------------------- -- -----+
| 文字セット_接続 |
| 文字セット_データベース |
|セットシステム |
| 文字セットディレクトリ | /usr/share/mysql/charsets/ |
+--------------------------+----- -- ----------+
セット内の 7 行 (0.00 秒)
mysql> 'collation_%' のような変数を表示します;
+- -- ------------------------+-----------------+
| 変数名 | |
+----------------------+--------+
|照合_接続 |
| 照合_データベース |
+--------------------------+-- ------ -----------+
3行セット(0.00秒)
上記の値はシステムのデフォルト値です。 (システムがデフォルトでスウェーデン語のソート方法 latin1 を使用するのは奇妙です。)
本来の方法で PHP を介して MySQL データベースにアクセスすると、テーブルのデフォルトの文字セットが utf8 に設定され、クエリが utf8 を介して送信されたとしても、 UTF-8 エンコーディングでは、データベースに保存されているデータが依然として文字化けしていることがわかります。問題はこの接続層にあります。解決策は、クエリを送信する前に次の文を実行することです:
SET NAMES 'utf8';
これは、次の 3 つの命令と同等です:
SET Character_set_client = utf8;
SET Character_set_results = utf8;
SET Character_set_connection = utf8;
もう一度試すと正常になります。
上記は、MySQL 4.1 への PHP アクセスの文字化け問題を解決するためのコンテンツです。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) にご注意ください。