1

(对不起我的英语不好,我是法国人)

我在一个 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\_%";
+--------------+------+
| 变量名 | 价值 |
+--------------+------+
| character_set_client | utf8 |
| 字符集连接 | utf8 |
| 字符集数据库 | utf8 |
| 字符集文件系统 | utf8 |
| 字符集结果 | utf8 |
| character_set_server | utf8 |
| 字符集系统 | utf8 |
+--------------+------+
一组 7 行(0.00 秒)

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

我阅读了所有关于字符集和排序规则的 MySQL 文档,但我没有找到关于这个问题的解释或答案。

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

4

1 回答 1

0

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

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

解决方案很简单:只需将 MySQL DSN (PDO) 中的 UTF-8 精确字符集:http: //fr2.php.net/manual/en/ref.pdo-mysql.connection.php

再见。

于 2013-11-21T08:59:47.380 回答