这通常是由于连接的字符集和字符串的用户不一致造成的。例如,连接字符集可能返回 UTF-8,而 PHP 脚本可能会将字符串视为 iso-latin-1,这正是导致这种情况的原因。我不确定这些属性是如何在 PHP 中设置的。
在mysql
CLI 中,您可以使用以下命令查看各种属性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
并由0xA3
iso-latin-1 字形“£”表示