【记录】微信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有关
 
相关文章
相关标签/搜索