【記錄】微信emoji表情存入數據庫


 

  最近遇到一個問題,在微信授權獲取用戶信息的時候,由於微信昵稱(nickName)是表情,無法存入數據庫。

查其原因,原來是因為數據庫的編碼格式不正確,我的是utf-8 改成utf8mb4就可以了。

  其實utf-8是Mysql的一個Bug,此utf-8不是真正的我們熟知的UTF-8,mysql中的utf8最多只能支持3bytes長度的字符編碼,對於一些需要占據4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行。

在mysql中請大家忘記**utf8**,永遠使用**utf8mb4**。避免以后采坑!!!

  所以我在創建用戶表時候是這么設置的

ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用戶會員表';

 

所謂utf8_unicode_ci,其實是用來排序的規則。對於mysql中那些字符類型的列,如VARCHAR,CHAR,TEXT類型的列,都需要有一個COLLATE類型來告知mysql如何對該列進行排序和比較。簡而言之, COLLATE會影響到ORDER BY語句的順序,會影響到WHERE條件中大於小於號篩選出來的結果,會影響**DISTINCT** **GROUP BY** **HAVING** 語句的查詢結果。另外,mysql建索引的時候,如果索引列是字符類型,也 會影響索引創建,只不過這種影響我們感知不到。總之, 凡是涉及到字符類型比較或排序的地方,都會和COLLATE有關
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM