(抱歉我的英语很差,我是法国人)
我在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程序似乎不关心字符集以及如何修复它?
答案 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。
再见。