關(guān)于MySQL實現(xiàn)指定編碼遇到的坑
寫在前面
環(huán)境:MySQL5.7+,MySQL數(shù)據(jù)庫字符編碼實現(xiàn)為utf8,表也為utf8
場景:微信授權(quán)獲取用戶信息(包括昵稱)并保存到數(shù)據(jù)庫,有的用戶成功了,少數(shù)用戶卻失敗了
那么為什么會失敗呢?
貼上報錯日志
Incorrect string value: '\xF0\x9F\x98\x98\xF0\x9F...' for column 'nickname' at row 1
是因為失敗的用戶微信昵稱中帶有emoji符號導致的
剖析:
MySQL支持多種字符編碼集,如UTF-8、GB2312、GBK等
可以通過 SHOW CHARSET 命令查看。

通常我們會建議使用 UTF-8 作為默認的字符編碼方式。
從上圖我們可以看到,MySQL數(shù)據(jù)庫有兩套 UTF-8 編碼實現(xiàn)。
- utf8:utf8 編碼只支持三個字節(jié)以內(nèi)。在 utf8 編碼中,中文是占了3個字節(jié),其他的英文、數(shù)字、符號都是占1個字節(jié)。但是emoji符號占4個字節(jié),一些比較復雜的文字、繁體字也是占4個字節(jié)。
- utf8mb4:UTF-8編碼的完整實現(xiàn)。最多可支持4個字節(jié),所以,可以用來存儲emoji符號。
查閱資料,官方解釋:

最后
Tips:如果有需要保存emoji符號的字段,記得一定要指定編碼為 utf8mb4 。
到此這篇關(guān)于一個關(guān)于MySQL指定編碼實現(xiàn)的小坑的文章就介紹到這了,更多相關(guān)MySQL指定編碼內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信