Typecho 添加 Emoji 表情报错
前言
Typecho 添加 Emoji 表情不支持,报错 Database Query Error
Emoji 表情
Emoji 就是表情符号,来自日语词汇“絵文字”(假名为“えもじ”,读音即 emoji),随着技术的发展被使用得越来越广泛。
😀😁😂🤣😃😄😅😆😉😊😋😎😍😘🥰😗🙄🤐😐😪😴
👩👨🧑👧👦🧒👶👵👴👩🦳👼🤶👮♀️👩🏭
🎈🎆🎇🧨✨🎉🎊🎃🎄🎋🎍🎎🎏🎐🎑🧧🎀🎁🎗🎞🎟🎫🎠🎡👟🥾🥿🥌
🍕🍔🍟🌭🍿🥟🍛🍗🚗🚓🚕🚝🚈🚅🚄❤🧡💛✝☦♐♏♎♍
utf8mb4 与 UTF8
utf8mb4 它占用 4 个字节的存储空间,而 utf8 是 3 个字节,这样,用 3 个字节去存储 4 个字节的东西,很明显是存不下的,会报错,所以要用 utf8mb4,并且 utf8mb4 是兼容 utf8 的。
注意:对于 MariaDB 而言貌似 utf8mb4 有一个使用限制,MariaDB 版本必须是 5.5 以上;对于PHP而言,只有在 PHP5.5 以后才支持。
Emoji 表情 是 4 个字节。而我们默认的 Typecho数据库表编码为 UTF-8,这么说就明白了吧 😉?
解决方案
[1] 数据库编码更改
方案 1:如果你正好使用 PhpMyadmin
的话,那么修改起来就比较容易了
进入 PhpMyadmin
,选择对应数据库,操作 排序规则 选择 utf8mb4_unicode_ci
修改数据库表排序顺序 UTF8 为 utf8mb4
方案 2
alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_unicode_ci;
[2] 数据库配置文件更改
修改 Typecho 网站 根目录 数据库配置文件 config.inc.php
$db->addServer(array (
'host' => localhost,
'user' => 'youruser',
'password' => 'yourpassword',
'charset' => 'utf8mb4', // 修改这一行 utf8 -> utf8mb4
'port' => xxxx,
'database' => 'yourdatabase'
), Typecho_Db::READ | Typecho_Db::WRITE);