關(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符號導(dǎo)致的
剖析:
MySQL支持多種字符編碼集,如UTF-8、GB2312、GBK等
可以通過 SHOW CHARSET 命令查看。
通常我們會建議使用 UTF-8 作為默認(rèn)的字符編碼方式。
從上圖我們可以看到,MySQL數(shù)據(jù)庫有兩套 UTF-8 編碼實現(xiàn)。
- utf8:utf8 編碼只支持三個字節(jié)以內(nèi)。在 utf8 編碼中,中文是占了3個字節(jié),其他的英文、數(shù)字、符號都是占1個字節(jié)。但是emoji符號占4個字節(jié),一些比較復(fù)雜的文字、繁體字也是占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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL錯誤ERROR 2002 (HY000): Can''t connect to local MySQL ser
這篇文章主要介紹了MySQL錯誤ERROR 2002 (HY000): Can't connect to local MySQL server through socket,需要的朋友可以參考下2014-10-10MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解
這篇文章主要介紹了MySQL 8.0.20 Window10免安裝版配置及Navicat管理,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06MySQL創(chuàng)建唯一索引時報錯Duplicate?entry?*?for?key問題
這篇文章主要介紹了MySQL創(chuàng)建唯一索引時報錯Duplicate?entry?*?for?key問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09在MySQL中使用JOIN語句進(jìn)行連接操作的詳細(xì)教程
這篇文章主要介紹了在MySQL中使用JOIN語句進(jìn)行連接操作的詳細(xì)教程,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05winxp 安裝MYSQL 出現(xiàn)Error 1045 access denied 的解決方法
自己遇到了這個問題,也找了很久才解決,就整理一下,希望對大家有幫助!2010-07-07