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

 

  最近遇到一個問題,在微信受權獲取用戶信息的時候,因爲微信暱稱(nickName)是表情,沒法存入數據庫。mysql

查其緣由,原來是由於數據庫的編碼格式不正確,個人是utf-8 改爲utf8mb4就能夠了。sql

  其實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='用戶會員表';spa

 

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