起因
评论中增加了Emoji
表情,结果写入的时候报错了,找了半天原因,原来是数据库utf8
和utf8mb4
的区别问题。
区别
utf8
:通常指的是utf8
(也称为utf8_general_ci
或utf8_bin
),它支持标准的Unicode
字符,但不支持四个字节的字符(如 Emoji、某些表情符号和其他复杂字符)。utf8mb4
:这是一种扩展的UTF-8
编码,它可以支持所有Unicode
字符,包括四个字节的字符(如Emoji
)。
Typecho配置
在config.inc.php
中数据库参数的配置中有charset
的配置,可以配置为utf8
或utf8mb4
。
代码判断
在不关心具体数据库的判断中可以直接通过配置中的charset
判断是否为utf8mb4
。
$db = Typecho_Db::get();
$dbconfig = $db->getConfig(Typecho_Db::WRITE);
if($dbconfig['charset'] === 'utf8mb4') {
return true;
}
return false;
建议
不管是否存储Emoji
,建议还是使用utf8mb4编码。