Typecho 默認(rèn)是不支持 Emoji 表情的,當(dāng)你評(píng)論中有 Emoji 的話,就會(huì)報(bào)這個(gè)錯(cuò)誤。這個(gè)是因?yàn)榫幋a的問(wèn)題造成的。Mysql 默認(rèn)使用的是 utf8 字符集,utf8 字符集的編碼范圍 u0000-uFFFF,而 Emoji 是在 Unicode 位于 u1F601-u1F64F 區(qū)段的字符。所以評(píng)論中帶有 Emoji 表情才會(huì)報(bào)錯(cuò)。
知道了問(wèn)題,那解決起來(lái)就很容易了,我們只需要修改 Mysql 中評(píng)論字段的字符集編碼為 utf8mb4 即可。
評(píng)論字段是對(duì)應(yīng)的博客數(shù)據(jù)庫(kù)中 typecho_comments
表中的 text
字段,我們可以使用數(shù)據(jù)庫(kù)工具,把該字段的編碼修改為 utf8mb4_general_ci
。也可以用下面命令行來(lái)修改。
# 首先進(jìn)入你的博客使用的數(shù)據(jù)庫(kù)
use blogDatabase;
# 然后修改 typecho_comments 表中 text 字段字符集
ALTER TABLE typecho_comments CHANGE text text text CHARACTER SET utf8mb4;
然后修改網(wǎng)站的配置文件,打開網(wǎng)站根目錄,找到 config.inc.php
文件,把 charset
的值改為 urf8mb4
。
好了,現(xiàn)在我們就可以在評(píng)論里使用 Emoji 表情了。
后面又遇到了一個(gè)問(wèn)題,就是使用手機(jī)進(jìn)行評(píng)論的話也會(huì)報(bào)這個(gè)錯(cuò),只有文字的評(píng)論也會(huì)報(bào)。非常奇怪,在電腦端是沒(méi)有問(wèn)題的。
我們打開 debug 模式,來(lái)看一下具體的 log 信息。同樣在 config.inc.php
目錄下加入 define('__TYPECHO_DEBUG__', true);
來(lái)開啟 debug。然后我們得到了下面的報(bào)錯(cuò)信息 1406 Data too long for column 'XXX' at row 1
。
報(bào)錯(cuò)提示字段太長(zhǎng)了,可是我只輸入一個(gè)字符也會(huì)報(bào)錯(cuò)。然后在查詢資料,得知 Mysql 有一個(gè)嚴(yán)格模式。
我們只要找到 Mysql 的配置文件 my.cnf,把 sql-mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
中的 STRICT_TRANS_TABLES
刪掉,然后重啟 Mysql 服務(wù),問(wèn)題就解決了。