【发布时间】:2021-03-16 02:11:15
【问题描述】:
我正在尝试在屏幕上显示来自数据库的表情符号,但有些表情符号有效,有些则无效。
Database version: 10.5.4-MariaDB
Database Collation: utf8mb4_general_ci
Table charset: utf8mb4_general_ci
在 PHP 上,我使用的是简单的选择 (SELECT * FROM table_name)
表格有以下几行:
1 - Backlog ????️
2 - Prioritized ????
3 - Doing ✏️
4 - On Hold ⏰
5 - Done ✅
6 - Archived ????
(就是这样,直接的表情符号,没有编码)
当我尝试在选择结果集上执行“打印”或“回显”时,我得到了:
1 - Backlog ?
2 - Prioritized ?
3 - Doing ✏️
4 - On Hold ⏰
5 - Done ✅
6 - Archived ?
但是,如果我尝试将表情符号直接放在代码上,例如:<div class="title">Backlog ????️</div> 它工作正常。
如何将其存储在数据库中,并且选择/打印没有问题?
我真的不知道我是否做得对,是否应该在之前/之后编码/解码。
我已经尝试使用utf8_encode 和utf8_decode,但没有成功。
【问题讨论】:
-
丢失的字符都是更高级别的代码点,所以你没有在某处使用 utf8mb4 。
show create table whatever带给你什么? -
@miken32 感谢您的回答,您给了我一个方向,我找到了解决方案(我会在下面回答)
-
列和连接需要指定为
CHARACTER SETutf8mb4`,因为其中一些表情符号是4字节的。请提供SHOW VARIABLES LIKE 'char%';和SHOW CREATE TABLE,以便我们进行验证。 (同时,编码/解码功能也无济于事。)