これは通常、接続の文字セットと文字列のユーザーが一致していないことが原因です。たとえば、接続文字セットが UTF-8 を返す可能性があり、PHP スクリプトが文字列を iso-latin-1 として扱う可能性があり、まさにこれが原因です。これらのプロパティが PHP でどのように設定されているかわかりません。
CLIでは、mysql
次を使用してさまざまなプロパティを表示できますSHOW VARIABLES
。
mysql> show variables like '%char%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
私はその方向を見始めます。ここで示されているのは、単一の文字を期待しているときに、複数の文字が表示されているということです。7 ビット範囲外のものは、複数の UTF-8 オクテットにエンコードされます。
UTF-8 の詳細
- "£" は iso-latin-1 コードポイントです
0xA3
0xA3
UTF-8 を使用したエンコードの結果はバイトになります0xC2
。0xA3
0xC2
iso-latin-1 グリフ "£"で0xA3
表されます。