微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程__https://segmentfault.com/a/1190000004594385

news/2024/5/19 14:36:03
自己的练习项目中涉及保存微信的nickname,之前一直正常使用,但是突然遇到一个之前没有遇到的问题。经过调试发现错误如下:

Incorrect string value: '\xF0\x9F\x99\x88\xF0\x9F...' for column 'nickname' at row 1
经过仔细查看发现可以获得nickname的数据,但是无法保存到mysql数据库,查看用户的微信发现在nickname中使用了emoji字符。
到百度(只能用这个,其他的麻烦呀。)上查找发现主要解决方案就是MySQL的编码设置由utf8转为utf8mb4。
具体解释可见:[详细emoji表情与utf8mb4的关系][1] ,写的非常全面详细。

网上的解决办法大多是修改my.cnf参数,设置mysql的编码为utf8mb4,这种方法虽然彻底,但是通常要重启mysql,会造成生产系统临时当机。我认为写的比较好的方法是:mysql/Java服务端对emoji的支持,一般可参考以上方法。文章中的关键点也说的比较清楚。

下面是我的处理方法:
要求:

1.MySQL的版本不能太低,低于5.5.3的版本不支持utf8mb4编码。select version();
2.JDBC驱动版本不能太低,mysql connector版本高于5.1.13。
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

3.将表中的对应字段,比如会员表的呢称字段,其字符集修改成utf8mb4。
4.最后修改druid数据源的配置,增加一行:


<property name="connectionInitSqls" value="set names utf8mb4;"/>

5.检查下jdbc连接串的设置:

jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8

这里要注意:有人建议删除useUnicode=true&characterEncoding=utf8,但好像我这里会发生保存数据时发生乱码的现象。

本文重要参考:mysql : utf8mb4 的问题

  • 2016年03月13日发布
  • 新浪微博
  • 微信
  • Twitter
  • Facebook

http://www.niftyadmin.cn/n/2008620.html

相关文章

反编译java class并优雅的调试--http://www.blogjava.net/miaoyachun/archive/2013/02/22/395575.html

https://sourceforge.net/projects/realignmentjd/files/ 官方文档 用jd-eclipse 插件来反编译java class文件的输出还是挺nice的&#xff0c;虽然阅读方便了 但是对debug确造成一定的困扰&#xff0c;主要问题是line number的不match. Google了下遇到类似问题的真不少。最终找…

centos7安装最新版git_https://my.oschina.net/antsky/blog/514586

whoru 发表于 2年前 阅读 5961收藏 10点赞 1评论 1 腾讯云 普惠云计算 0门槛体验>>> 摘要: 介绍yum和源码包安装的具体方式 方式一、yum安装 # yum install git 通过yum方式安装&#xff0c;版本比较旧&#xff0c;CentOS6.5上安装好是1.7.1版。如果想安装最新版或…

SQLServer2008如何copydatabase--https://www.2cto.com/database/201411/351603.html

xjh测试有效 首页>数据库 > SQL Server > 正文SQLServer2008如何copydatabase2014-11-12 09:22:27 个评论 来源&#xff1a;tianshijianbing1989的专栏 收藏 我要投稿SQL Server 2008如何copy database&#xff1a; 方法一&#xff1a;使用Microsoft SQL Ser…

node.js的koa@2性能测试

一直都知道node.js的性能很好&#xff0c;但是却没有实际测试过&#xff0c;今天用ab实际测试一下。 先上结果&#xff1a;支持13000并发&#xff08;helloword&#xff09; CPU: inter 酷睿 i3-2330M 2.2GHz 4核 内存: 6G 系统: Win64 &#xff08;其实就是老旧的加装了4G内存…

使用sql语句创建修改SQL Server标识列(即自动增长列)--https://www.cnblogs.com/skylaugh/archive/2016/04/03/5350615.html

一、标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列。 该种列具有以下三种特点&#xff1a; 1、列的数据类型为不带小数的数值类型 2、在进行插入(Insert)操作时&#xff0c;该列的值是由系统按一定规律生成,不允许空值 3、列值不重复&#xff0c;具…

剑指offer——面试题4:二维数组中的查找

1 // 面试题4&#xff1a;二维数组中的查找2 // 题目&#xff1a;在一个二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按3 // 照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个4 // 整数&#xff0c;判断数…

常见网络攻击及防御

ARP攻击 前提是需要熟悉网卡的工作模式&#xff0c;网卡的工作模式分为单播、广播、组播等&#xff0c;arp协议发送请求是广播模式&#xff0c;回复是单播模式。概念&#xff1a;通过ip地址查找目标机器mac地址&#xff0c;源机器通过广播方式发送请求包&#xff08;包里包含目…

office365邮箱设置

POP setting Server name: outlook.office365.com Port: 995 Encryption method: SSL SMTP setting Server name: smtp.office365.com Port: 587 Encryption method: TLS IMAP setting Server name: outlook.office365.com Port: 993 Encryption method: SSL