還是之前說(shuō)的問(wèn)題,向數(shù)據(jù)庫(kù)存儲(chǔ)emoji表情的時(shí)候,報(bào)錯(cuò):Incorrect string value: '\xF0\x9F\xA4\x97\xF0\x9F...' for column 'content' at row 1。
上篇文章說(shuō)到,只需要把字段的格式設(shè)置成utf8mb4的字符集就可以解決這個(gè)問(wèn)題。確實(shí)如果我們把字段的字符集設(shè)置成這樣之后,使用數(shù)據(jù)庫(kù)管理工具的時(shí)候可以直接把emoji寫(xiě)入到字段中,但是為什么在程序中寫(xiě)入數(shù)據(jù)庫(kù)的時(shí)候還是報(bào)這個(gè)錯(cuò)誤呢。
經(jīng)過(guò)我的一番思索后想到,可能是因?yàn)?a href="/html/show-2754.html" target="_self">數(shù)據(jù)庫(kù)連接的設(shè)置問(wèn)題,連接數(shù)據(jù)庫(kù)的時(shí)候沒(méi)有指定字符集,數(shù)據(jù)庫(kù)連接字符集是用于在數(shù)據(jù)庫(kù)連接過(guò)程中指定字符編碼的參數(shù)。它決定了在連接數(shù)據(jù)庫(kù)時(shí)使用的字符編碼方式,一半連接數(shù)據(jù)庫(kù)的默認(rèn)配置都是使用utf8的字符集進(jìn)行連接,所以我傳過(guò)去的表情符號(hào)其實(shí)還是被使用utf8的字符集進(jìn)行存儲(chǔ)了,所以還是報(bào)錯(cuò)了。
那么只需要設(shè)置一下數(shù)據(jù)庫(kù)連接方式就可以了,把連接數(shù)據(jù)庫(kù)時(shí)使用的字符集設(shè)置為utf8mb4,Django如何設(shè)置連接數(shù)據(jù)庫(kù)使用的字符集呢,需要在項(xiàng)目的settings.py文件中修改數(shù)據(jù)庫(kù)配置文件,增加charset:utf8mb4即可解決問(wèn)題