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