我遇到了一个我似乎无法理解的问题。 当我从MySQL数据库中的某个表'articles'中提取对象时,带有重音符号的字符(如éáú等等)会变成问号。然而,当我从不同的表格'突出'中拉出来时,这不会发生。
我已经检查过这些表在MySQL中使用相同的字符集和类型。我还检查了问题是否只是在前端,但我的调试器已经告诉我该变量包含questionmark符号。
这是从数据库获取数据的代码
if ($result = mysqli_query($conn, $query)) {
while ($obj = mysqli_fetch_object($result)) {
$resObj[] = $obj;
}
} else return false;
return $resObj;
我可能错过了一些明显的东西,但我不知道是什么。
编辑:phpMyAdmin中的表显示正确的字符,因此它们可以正确插入。
答案 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;
请考虑在之前进行备份。