【发布时间】:2017-02-17 11:32:18
【问题描述】:
刚才,我遇到了一个我偶然没有遇到过的问题:
为了支持特定列中的表情符号,我决定将我的mysqli_set_charset() 设置为utf8_mb4 以及我的数据库中的一些列编码。
现在,我遇到了 PHP 实际上没有正确处理来自普通 utf8 编码字段的重音字符的问题。
现在,我坚持使用 utf8 和 utf8mb4 混合的结果。由于我的数据处理能力不是很强(曾经使用为我处理所有这些的框架),我很不熟悉如何最好地解决这个问题。
我考虑过以下选项:
1) 将我的整个数据库设置为 utf8mb4 排序规则而不是 utf8,但有一些例外。
2 ) 使用mysqli_set_charset() 更改它,并确保获取所述数据的查询是分开的
现在,这些对我来说似乎都不是好主意,但我真的想不出更好的解决方案。
那么还有剩下的问题:
- 将我的整个数据库设置为
utf8mb4而不是utf8会带来很大的性能变化吗?我确实意识到utf8mb4更大,因此更慢,这就是为什么我首先尝试只在有问题的列上使用它。 - 我有没有办法让 PHP 处理
utf8编码良好,即使mysqli_charset开启utf8mb4? - 你有更好的主意吗?
我在这个问题上真的不知所措,老实说,我无法猜测哪个选项是最好的。谷歌搜索并没有太大帮助,因为它只返回解释它的差异或如何将您的数据库转换为utf8mb4 的链接,所以我非常想听听一位明智的 SO 同事对此的想法!
此特定情况下的列:
我的回复包括PHP的字符编码检测:
arri�n = UTF-8
bolsward = ASCII
go�nga = UTF-8
lo�nga = UTF-8
echt = ASCII
echteld = ASCII
echten (drenthe) = ASCII
echten (friesland) = ASCII
echtenerbrug = ASCII
echterbosch = ASCII
我的 MYSQLI 字符集:
mysqli_set_charset($this->getConn(), "utf8mb4");
——我刚刚意识到问题出在我的mysqli_set_charset 上。里面确实有一个下划线...
【问题讨论】:
标签: php mysql mysqli utf-8 utf8mb4