MySQL / MySQLDump / phpMyAdmin忽略字符集

时间:2013-11-13 09:00:55

标签: mysql encoding utf-8 phpmyadmin

(抱歉我的英语很差,我是法国人)

我在MySQL数据库上工作,配置为在MySQL指定的所有级别使用UTF-8 / utf8_general-ci:服务器,数据库,表和列。

当我通过PHP编写或读取数据时,它完全有效。我的所有数据都使用UTF-8。

我的问题:

如果我尝试使用 mysql 程序, phpMyAdmin 界面读取这些数据或使用 mysqldump 导出,则所有字符串都会显示奇怪的重音符号“§”(UTF-8读起来像ISO-8859-1)。

我尝试设置和配置所有与MySQL字符集相关的变量以使用UTF-8,但没有任何变化:

mysql> SHOW VARIABLES LIKE "character\_set\_%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| character_set_client     | utf8  |
| character_set_connection | utf8  |
| character_set_database   | utf8  |
| character_set_filesystem | utf8  |
| character_set_results    | utf8  |
| character_set_server     | utf8  |
| character_set_system     | utf8  |
+--------------------------+-------+
7 rows in set (0.00 sec)

我也尝试(在将所有变量设置为UTF-8之后)与MySQL本身插入一个新行。这个新行由MySQL读取没有问题(重音很好),但如果我用我的PHP程序读取这些行,它似乎是在ISO-8859-1中,因此以UTF-8显示失败。

我阅读了有关字符集和整理的所有MySQL文档,但我没有找到关于此问题的解释或答案。

那么,有人可以帮助我理解为什么MySQL程序似乎不关心字符集以及如何修复它?

1 个答案:

答案 0 :(得分:0)

我终于在另一个论坛找到了解决方案:http://fr.openclassrooms.com/forum/sujet/mysql-phpmyadmin-etc-ignorent-les-encodages(fr)

问题出在PHP,在PDO配置级别:我没有给MySQL DSN提供“charset”变量,所以当MySQL收到我的数据(UTF-8)时,他认为这是latin1所以写在UTF-8中,他再次将数据转换为UTF-8。

解决方案很简单:只需在MySQL DSN(PDO)中对UTF-8进行精确的charset:http://fr2.php.net/manual/en/ref.pdo-mysql.connection.php

再见。