之前在寫Flask入門項(xiàng)目Flask Mega項(xiàng)目的時(shí)候,一直都是用SQLite,后面切換到MySQL數(shù)據(jù)庫發(fā)現(xiàn)在存入一些EMOJI表情符號(hào)的時(shí)候,會(huì)出現(xiàn)如下的報(bào)錯(cuò)。
在興化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站制作,興化網(wǎng)站建設(shè)費(fèi)用合理。
剛開始覺得應(yīng)該是數(shù)據(jù)庫的編碼的問題,因?yàn)橹耙灿龅綌?shù)據(jù)庫存入特殊符號(hào)的時(shí)候發(fā)生報(bào)錯(cuò)。那先查看服務(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個(gè)字節(jié)的字符,如果采用utf8的數(shù)據(jù)庫插入表情字符,就會(huì)因?yàn)楸唤財(cái)鄬?dǎo)致無法存入到數(shù)據(jù)庫。
大概理解了原理就好辦了,修改數(shù)據(jù)庫的編碼格式,因?yàn)槲沂鞘褂玫氖荕ariadb數(shù)據(jù)庫
我修改的是/etc/my.cnf,/etc/my.cnf.d/目錄下的配置文件,大概修改有這幾項(xiàng)內(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';
查看是否修改成功:
修改成功?。。?/strong>
重啟項(xiàng)目然后再次寫入帶有Emoji表情符號(hào)的評(píng)論到數(shù)據(jù)庫中,發(fā)現(xiàn)還是出現(xiàn)了問題,重新梳理了一下思路大概是因?yàn)镕lask項(xiàng)目中的SQLAlchemy連接Mysql的編碼格式錯(cuò)誤,重新修改了一下連接數(shù)據(jù)庫的編碼格式:
再次重啟項(xiàng)目重新發(fā)布評(píng)論:
大功告成,問題解決。
https://blog.csdn.net/woslx/article/details/49685111
https://blog.csdn.net/poice00/article/details/52129351