mysqli_fetch_object不会从某些表中返回字符串中的重音符

时间:2017-06-28 14:14:28

标签: php mysql mysqli

我遇到了一个我似乎无法理解的问题。 当我从MySQL数据库中的某个表'articles'中提取对象时,带有重音符号的字符(如éáú等等)会变成问号。然而,当我从不同的表格'突出'中拉出来时,这不会发生。

我已经检查过这些表在MySQL中使用相同的字符集和类型。我还检查了问题是否只是在前端,但我的调试器已经告诉我该变量包含questionmark符号。

这是从数据库获取数据的代码

if ($result = mysqli_query($conn, $query)) {
        while ($obj = mysqli_fetch_object($result)) {
            $resObj[] = $obj;
        }
} else return false;
return $resObj;

我可能错过了一些明显的东西,但我不知道是什么。

编辑:phpMyAdmin中的表显示正确的字符,因此它们可以正确插入。

2 个答案:

答案 0 :(得分:2)

所以......没有时间来验证这一点,但看起来问题可能与SET CHARACTER SET <charset>有关。此命令将字符集关联到the collation of the default database

如果您正在呼叫<db-name>.highlights,然后没有为articles指定数据库,那么至少在理论上这可能导致出现差异。同时mysqli_set_charset($conn, <charset>)调用指令SET NAMES <charset>This sets all of the collation and connection information to match <charset>.

有许多设置you can update in my.cnf可以帮助解决此问题(例如为所有数据库设置默认排序规则并更新collation database值),但您需要这样做通过在PHP中显式设置更安全。显式优于隐式和所有。

答案 1 :(得分:0)

在将数据写入db之前可能存在问题。你应该检查你的PHP代码。作为第一步,尝试转换已存在数据的字符集。

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

请考虑在之前进行备份。