django + mysql項(xiàng)目中遇到的utf8mb4問題

背景

? ?

最近開發(fā)了一個(gè)分享言論的小程序后端, 開發(fā)過程中遇到了微信用戶的昵稱是??(emoji)的, 結(jié)果發(fā)現(xiàn)數(shù)據(jù)庫儲(chǔ)存的是亂碼顯示了一大堆??號(hào)

這讓我很是頭疼, 到網(wǎng)上找到了一個(gè)外國同行寫的blog,算是解決了mysql儲(chǔ)存emoji表情的問題

首先這個(gè)問題是由于編碼位數(shù)不同引起的, 在mysql中默認(rèn)的utf8是3位的, emoji表情是四位, 所以用三位空間儲(chǔ)存四位的儲(chǔ)存空間肯定出問題,

所示emoji儲(chǔ)存需要占位更高的utf8mb4進(jìn)行儲(chǔ)存

在默認(rèn)使用utf8編碼創(chuàng)建的數(shù)據(jù)庫,我們修改時(shí)需要按照有大到小的順序依次修改, 也就是說:

數(shù)據(jù)庫 ->? 表 - > 字段

數(shù)據(jù)庫修改

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

表修改

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

字段修改

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 注意這里的database_name,table_name,column_name,191都是根據(jù)自身情況進(jìn)行修改的

?

這個(gè)時(shí)候我們就已經(jīng)修改完了想要儲(chǔ)存emoji表情的字段

可是在實(shí)際的操作下, 我發(fā)現(xiàn)儲(chǔ)存的emoji表情仍然為問號(hào),經(jīng)過反復(fù)的對(duì)比發(fā)現(xiàn)數(shù)據(jù)庫的修改已經(jīng)完成了。

于是想到了是不是django這邊的出了問題,后來查到了需要在django settings 中數(shù)據(jù)庫database中加入一個(gè)指定字符編碼的項(xiàng),

DATABASES = {

????'default': {

????'ENGINE':'django.db.backends.mysql',

????'HOST':'127.0.0.1',

????'USER':'root',

????'PASSWORD':'123456',

????'NAME':'dacoff',

????'OPTIONS': {'charset':'utf8mb4'},

????}

}

這樣就可以在mysql中保存emoji表情了


查考文章:https://mathiasbynens.be/notes/mysql-utf8mb4#column-index-length

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容