您好,登錄后才能下訂單哦!
之前在寫Flask入門項目Flask Mega項目的時候,一直都是用SQLite,后面切換到Mysql數(shù)據(jù)庫發(fā)現(xiàn)在存入一些EMOJI表情符號的時候,會出現(xiàn)如下的報錯。
剛開始覺得應(yīng)該是數(shù)據(jù)庫的編碼的問題,因為之前也遇到數(shù)據(jù)庫存入特殊符號的時候發(fā)生報錯。那先查看服務(wù)器上面的數(shù)據(jù)庫編碼格式。
show variables like '%char%';
通過查看數(shù)據(jù)庫編碼發(fā)現(xiàn)都是utf8格式。然后查閱有關(guān)的資料,以及翻閱之前做過的筆記發(fā)現(xiàn),Mysql中的utf8編碼格式最多支持最多3字節(jié)的數(shù)據(jù),而emoji表情字符是4個字節(jié)的字符,如果采用utf8的數(shù)據(jù)庫插入表情字符,就會因為被截斷導(dǎo)致無法存入到數(shù)據(jù)庫。
大概理解了原理就好辦了,修改數(shù)據(jù)庫的編碼格式,因為我是使用的是Mariadb數(shù)據(jù)庫
我修改的是/etc/my.cnf,/etc/my.cnf.d/目錄下的配置文件,大概修改有這幾項內(nèi)容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4’
然后重啟mariadb數(shù)據(jù)庫,進(jìn)入數(shù)據(jù)庫中查看是否修改成功:
修改成功,然后接著修改數(shù)據(jù)庫和表的編碼格式:
alter database database_name character set 'utf8mb4' collate 'utf8mb4_general_ci';
表格編碼格式:
alter table table_name convert to character set 'utf8mb4' collate 'utf8mb4_general_ci';
查看是否修改成功:
修改成功?。?!
重啟項目然后再次寫入帶有Emoji表情符號的評論到數(shù)據(jù)庫中,發(fā)現(xiàn)還是出現(xiàn)了問題,重新梳理了一下思路大概是因為Flask項目中的SQLAlchemy連接Mysql的編碼格式錯誤,重新修改了一下連接數(shù)據(jù)庫的編碼格式:
再次重啟項目重新發(fā)布評論:
大功告成,問題解決。
https://blog.csdn.net/woslx/article/details/49685111
https://blog.csdn.net/poice00/article/details/52129351
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。