我遇到了一些特殊字符的问题。当一个人尝试使用例如字母'ö'在我的网站上注册时,我收到以下错误消息:
1366 - Incorrect string value: '\xF6m' for column 'username' at row 1
insert into phpbb3_users (username, username_clean, user_password) values ('Ström', 'Ström', '$H$9iK6K37VoHM//')
我理解字符设置可能是问题,当我检查数据库时,我可以看到一些表有排序规则:
latin1_swedish_ci
并且一些表具有排序规则(例如,上面示例中有问题的表'phpbb3_users'):
utf8_bin
当我检查我的MySql设置时,我发现我有这些混合设置:
| 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 | /usr/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci
感谢。
答案 0 :(得分:2)
你需要:
latin1
会这样做。如果你想存储更多“异国情调”的角色,utf8
是一个很好的选择,因为它几乎支持所有内容。* latin1_swedish_ci
类似的归类几乎无关紧要。整理从您选择的字符集开始,但字符集首先是导入变量。utf8
。这很可能是您的问题所在。如何设置取决于您连接数据库的方式。 mysql_set_charset
,您的DSN连接字符串中的charset
参数或SET NAMES utf8
查询都可以。{/ li>
* MySQL的utf8
不是“真正的”UTF-8,仅支持所有Unicode的子集。 utf8mb4
是“真正的”UTF-8,支持一切。 MySQL 5.1上没有utf8mb4
,只有5.5 +。
有关详细信息,请参阅UTF-8 all the way through,Handling Unicode Front To Back In A Web App,What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text。