在開發(fā)小程序時flask作為服務端,用mysql作為數(shù)據(jù)庫急黎。
小程序中允許用戶輸入包含emoji的文字內(nèi)容, 測試過程中發(fā)現(xiàn)報出如下錯誤:
(_mysql_exceptions.OperationalError) (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\xB2' for column 'content' at row 1")
大致意思是說闽铐,傳入的字符不正確。
首先想到的是字符集的問題占拍,于是百度了一下“mysql支持emoji”略就,果然找到了答案。創(chuàng)建數(shù)據(jù)庫的時候晃酒,我習慣性地使用了utf8表牢,然后要支持emoji的話,需要使用utf8mb4贝次。
可以參考這篇文章進行修改 MySQL中支持emoji表情的存儲
注意崔兴,按需修改,如果你只是個別字段需要emoji的話蛔翅, 就只改某個字段敲茄,減少影響范圍。
另外山析,這個修改是不需要重啟mysql服務的
修改完成后堰燎,試了一下,emoji變成了青一色的四個問號笋轨,????
秆剪。
既然字符集沒有問題了赊淑,那么應該是傳輸過程中的內(nèi)容轉(zhuǎn)換。由于使用的是flask_sqlalchemy來連接數(shù)據(jù)庫的仅讽,查看了文檔后陶缺,發(fā)現(xiàn),數(shù)據(jù)庫連接默認使用utf-8方式連接何什。
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://db_user:db_user_pwd@address:port/db_name'
可以使用下面的方式來修改連接時的默認字符集
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://db_user:db_user_pwd@address:port/db_name?charset=utf8mb4'
測試可用组哩。
環(huán)境
centos 7
python 3.6
flask 1.0.2
mysql 5.6