微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程

转:https://segmentfault.com/a/1190000004594385

项目中涉及保存微信的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;"/>
注意:此处依据不同连接池不同配置不同的参数,比如BoneCP连接池用的是 initSQL 配置
5.检查下jdbc连接串的设置:

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

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

原文地址:https://www.cnblogs.com/tv151579/p/10176820.html

时间: 2024-10-20 04:50:05

微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程的相关文章

JAVA 常见乱码问题及MYSQL character_set_server 设置

最近接手一个手机端服务端的程序(JAVA实现),我这边测试的话前台直接用的get方式传数据, get请求编码方式和post请求提交编码方式不同,get是把数据直接放到url中,例如以上的uname,IE浏览器先对中文进行utf-8编码(一个中文3个字符表示 太长),继而为了缩短字符又用ISO8859-1编码后传递给服务器.服务器的doGet方法中要先进行ISO8859-1解码再utf-8解码才能看到中文. post请求则在浏览器端把数据以utf-8的形式存储到http的请求体中,不用通过url传

微信nickname乱码及mysql编码格式设置(utf8mb4)

今天在写微信公众平台项目时,写到一个用户管理模块,接口神马的已经调试好了,于是将用户从微信服务器保存到本地数据库,发现报错: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'nickname' at row 1 大致说的是保存nickname字段时,发现不正确的字符串值,于是在保存前,将用户的昵称打印了出来,发现有emoji表情,上网查了一下,utf-8大小可能有三种分别为2字节.3字节.

mysql编码格式设置utf8

对于mysql网站的编码设置,首先参考的是三码合一,具体地址可以从百度搜索相关博文.此处举例http://www.51-n.com/t-4006-1-1.html. 但是在实际应用中,由于mysql版本问题,发现了一些问题,至今看到过一篇文章,但是找不到了.意思是从某个版本开始,mysql配置文件的设置,在[mysqld]下,一般是这样:character-set-server=utf8:可是有的情况是这样:character_set_server=utf8:每当我遇到问题时,我会用这两个分别测

PL/SQL Developer编码格式设置及中文乱码解决方案

1.PL/SQL Developer中文字段显示乱码 原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的. 2.PL/SQL Developer编码格式设置详细的解决方案如下: 首先,通过 select userenv('language') from dual; 查询oracle服务器端的编码, 如为: AMERICAN_AMERICA.US7ASCII 显示什么编码 就设置什么编码 在我们的客户端需要和服务器端的编码保持一致. 因此在客户端,需要设置环境变量

使用命令行设置MySql编码格式

使用命令行设置MySql编码格式 1.登录mysql 2.输入 SHOW VARIABLES LIKE 'character_set_%'; 3.查看 value值是否为utf8,如果不是,则使用SET设置. 4.SHOW VARIABLES LIKE 'character_set_%';  再次查看确认. 5.最后exit; 完成 2018年10月29日20:52:42 原文地址:https://www.cnblogs.com/lygz/p/9873198.html

MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集

MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的.character-set-database:数据库字符集.character-set-table:数据库表字符集.优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集.character-set-client:客户端的字符

MySQL编码格式

一.问题引出 在安装mysql是将其编码格式配置为utf-8,所以此时mysql的 character_set_client, character_set_connection, character_set_database,  character_set_results,  character_set_server, character_set_system编码格式都是utf-8. 查看编码格式的命令如下: mysql> show variables like 'character%'; 当前

mysql字符集设置浅了解

gbk.gb2312:面向使用汉语的中国人 utf-8:相当于兼容模式,缺点是占空间大 utf8_unicode_ci与utf8_general_ci的区别:utf8_general_ci不支持扩展,仅能够在字符之间进行逐个比较.这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的校对规则相比,比较正确性较差.--utf8_unicode_ci与utf8_general_ci的区别 utf8mb4:兼容utf8,且比utf8能表示更多的字符

MySQL 字符集设置

/*************************************************************************** * MySQL 字符集设置 * 说明: * 数据库这块很多时候都会因为字符集不兼容导致数据通信异常,所以这边把 * MySQL的字符集设定为utf-8,这个比较通用. * * 2016-9-24 深圳 南山平山村 曾剑锋 **************************************************************