刚才,我遇到了一个碰巧以前从未遇到过的问题:

为了在特定列中支持表情符号,我决定将mysqli_set_charset()设置为utf8_mb4,并在数据库中设置一些编码列。

现在,我遇到了PHP实际上无法正确处理来自普通utf8编码字段的带重音字符的问题。

现在,我坚持将utf8utf8mb4的结果混合在一起。由于我的数据处理能力不是很强(用于为我处理所有事务的工作框架),所以我对如何最好地解决此问题并不熟悉。

我考虑过以下选项:

1)将我的整个数据库设置为utf8mb4排序规则,而不是utf8,但有一些例外。

2)使用mysqli_set_charset()进行更改,只需确保获取所述数据的查询是分开的

现在,这些对我来说都不是个好主意,但我真的想不出更好的解决方案。

因此,还有其他问题:


将我的整个数据库设置为utf8mb4而不是utf8会带来很大的性能变化吗?我确实意识到utf8mb4较大,因此较慢,这就是为什么我首先尝试仅在相关列上使用它的原因。
我有什么办法可以让PHP简单地处理好utf8编码,即使mysqli_charset启用了utf8mb4时也是如此?
你有更好的主意吗?


我在这个问题上实在不知所措,老实说,我猜不出哪个选择是最好的。对其进行谷歌搜索并没有太大帮助,因为它仅返回解释其区别或有关如何将数据库转换为utf8mb4的链接,因此,我非常乐意听到一位明智的SO同事对此的想法。 !

在此特定情况下的列:

php - 处理混合的utf8和utf8mb4 MYSQLI和PHP-LMLPHP

我的回答包括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上。确实曾经有一个下划线...

最佳答案

它的拼写是utf8mb4(没有下划线)。

请参阅Trouble with utf8 characters; what I see is not what I stored
特别是,请阅读答案中的“您应该做什么概述”。

您无需更改整个数据库。只为选定的列指定utf8mb4是可以的。

您确实需要使用utf8mb4进行连接,但是您指定了'UTF-8',这与MySQL的utf8mb4等效。 MySQL的utf8utf8mb4的子集。 (注意:我在使用连字符和下划线时非常准确。)

对于传输utf8mb4和utf8子集之间共有的字符,utf8mb4既不大,也不慢。表情符号为4个字节,因此它们比大多数其他字符大,但请注意,它们为4个字节;不要流汗。

关于php - 处理混合的utf8和utf8mb4 MYSQLI和PHP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39934653/

10-11 03:17