首页 > 解决方案 > 某些 unicode 图标未保存并正确显示

问题描述

我正在尝试将 unicode 图标添加到我的网站 SEO 标题/元数据中,由于某种原因,它不会接受某些图标。我的网站是 UTF-8。我将它保存在我的数据库中作为utf8_general_ci.

当我添加图标时,它将返回为 ???? https://emojipedia.org/heavy-dollar-sign/

当我添加图标✔️时,它会在标题中添加✔️。 https://emojipedia.org/check-mark/

这是有原因的还是正常的?

标签: htmlcssmysqlutf-8icons

解决方案


“✔️”是一个 3 字节的 Emoji;"" 占用 4 个字节。所以问题是CHARACTER SET utf8需要更改为CHARACTER SET utf8mb4.

解决方案是

  • utf8mb4在连接参数中提供` 。此操作因客户端(Java/PHP/...)而异。
  • 连接后立即添加SET NAMES utf8mb4到代码中。

如果这些还不够具体,请搜索您拥有的位置utf8,它可能是utf8mb4。(注意:我不是说UTF-8,这是非 MySQL 的等价物utf8mb4。)

更多讨论: UTF-8 字符问题;我看到的不是我存储的

从技术上讲,复选标记需要 6 个字节——两个 3 字节字符:十六进制 E29C94 EFB88F。所以它与utf8. 但是美元符号需要4个字节:F09F92B2,所以不能用utf8表示,只能用utf8mb4表示。失败通过 4 个问号表示。


推荐阅读