某些 unicode 图标未保存并正确显示

Some unicode icons are not saved and displayed correct

我正在尝试将 unicode 图标添加到我的网站 SEO title/meta,但由于某些原因它不接受某些图标。我的网站是 UTF-8。我将其作为 utf8_general_ci.

保存在我的数据库中

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

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

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

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

解决方案是

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

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

更多讨论:

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