某些 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 个问号显示。
我正在尝试将 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 个问号显示。