Mysql解决微信特殊符号昵称入库报错乱码
环境声明
Mysql5.7
思考乱码原因
- 自己代码和微信编码不统一
- 自己代码传输到数据库序列化,到数据库反序列化编码不统一
- 数据库接受到数据库后存入数据库乱码(数据库反序列化和数据库编码级不统一)
怎么解决
解决乱码唯一手段,保证编码统一
解决自己代码和微信编码统一
保证代码操作序列化微信返回参数和微信编码统一(默认utf-8),这部分问题,可以通过断点,日志轻松排查出来
解决代码传输到数据库,序列化反序列化问题
- 设置mysql 连接url 千万带 characterEncoding=UTF-8
-
错误例子:
datasource: master: url: jdbc:mysql://XX/demo-database?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
-
原因: 特殊表情需要utf8mb4,你这样设置会让数据库客户端代码,认可是utf-8,入库特殊符号就会乱码
-
- 如果url连接不设置默认的序列化类型,那具体序列化应该用那个类型,这个我们可以在数据库设置
-
打开数据库
vim /etc/my.conf
, 添加如下内容# 设置客户端序列化默认编码级 [client] default-character-set = utf8mb4 # 设置mysql默认编码级 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
systemctl restart mysqld
,根据自己安装类型,重启,指令只是在centos7,yum安装mysql重启方法 -
解决数据库编码级
新建数据库保证数据库编码级是 utf8mb4
通过以上手段,保证数据编码一致,可以解决微信特殊符号昵称乱码问题