我应该使用什么字符集和表格整理?

时间:2013-10-15 10:15:32

标签: php mysql

我遇到了一些特殊字符的问题。当一个人尝试使用例如字母'ö'在我的网站上注册时,我收到以下错误消息:

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 
  1. 你建议我使用什么character_set?我已经了解到将character_set更改为utf8mb4可以解决问题,但我的MySql版本(5.1.4)是否支持该问题?
  2. 我应该更改character_set吗?在/etc/my.cnf和所有表格排序的所有实例中?
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

你需要:

  1. 的字符集(或表/数据库/服务器的下一个默认字符集)设置为支持您想要的字符的字符集商店。如果您想存储“ö”,latin1会这样做。如果你想存储更多“异国情调”的角色,utf8是一个很好的选择,因为它几乎支持所有内容。*
    请注意,与latin1_swedish_ci类似的归类几乎无关紧要。整理从您选择的字符集开始,但字符集首先是导入变量。
  2. 连接字符集设置为您要发送文本的字符集。如果您要将UTF-8编码文本发送到数据库,则需要通过设置告诉它连接字符集到utf8。这很可能是您的问题所在。如何设置取决于您连接数据库的方式。 mysql_set_charset,您的DSN连接字符串中的charset参数或SET NAMES utf8查询都可以。{/ li>
  3. 发送以您在步骤2中声明的编码编码的文本。
  4. * MySQL的utf8不是“真正的”UTF-8,仅支持所有Unicode的子集。 utf8mb4是“真正的”UTF-8,支持一切。 MySQL 5.1上没有utf8mb4,只有5.5 +。

    有关详细信息,请参阅UTF-8 all the way throughHandling Unicode Front To Back In A Web AppWhat Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text