在做微信小程序保存用户信息(昵称中带emoji表情)时,报错:

java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘nickname’ at row 1

原因:utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常。
解决办法:更改数据库的编码为utf8mb4,utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。

前提:mysql支持utf8mb4的版本不低于5.5.3,mysql驱动版本不能低于5.1.13。若不是,升级到最新版本。

一、命令行连接mysql后查看系统变量:

SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’;

二、修改mysql配置文件my.cnf(windows为my.ini)

my.cnf一般在etc/my.cnf位置。找到后请在以下三部分里添加如下内容:

[client]
default-character-set = utf8mb4
[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'

三、重启mysql

service mysqld stop
service mysqld start

四、再次查看系统变量


character_set_client(客户端来源数据使用的字符集)
character_set_connection(连接层字符集)
character_set_database(当前选中数据库的默认字符集)
character_set_results(查询结果字符集)
character_set_server(默认的内部操作字符集)
以上变量必须是utf8mb4

五、将数据库和表的编码改为utf8mb4

更改数据库编码:
alter database 数据库名称 character set =utf8mb4 collate utf8mb4_general_ci;
更改表编码:
alter table 表名 convert to character set utf8mb4 collate utf8mb4_general_ci;

这里排序规则采用utf8mb4_general_ci和utf8mb4_unicode_ci似乎都可以,我在项目中采用默认utf8mb4_general_ci,并把表中昵称列的排序规则更改为utf8mb4_unicode_ci,测试没有问题。

六、设置jdbc连接配置

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

useUnicode=true当时因为没加这个参数,数据库录入乱码,找了好久。。。


测试录入成功木有乱码,美滋滋

数据库存储微信昵称emoji表情相关推荐

  1. 微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!

    微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决! 参考文章: (1)微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决! (2)https:// ...

  2. php mysql 微信昵称_php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  3. java ipone 微信昵称emoji表情保存失败 无法存入数据库

    问题描述:ipone5s中昵称输入"emoji 表情",保存数据库有问题. 运行环境:Java.Tomcat.mysql.Linux(我的Linux下为乱码,这个是linux问题) ...

  4. java微信昵称表情_java 微信昵称emoji表情保存失败 无法存入数据库(二)

    前言: 最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题.困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移.在此特别分析和整理,方便更 ...

  5. mysql 过滤微信昵称表情_微信昵称emoji表情的过滤

    前言 微信昵称现在五花八门,可以加入各种表情符号.这些符号存储到mysql数据库时存在一些问题.这里记录下我的解决方法. 问题 第一种方案:修改数据库编码,支持存储emoji表情 mysql的utf8 ...

  6. java过滤微信昵称emoji表情

    注:核心代码为转载 最近在开发中遇到要过滤掉微信名称中的表情,再入库的功能:在找了多篇实现验证后,发现排名在前的文章们竟然有bug,最终找到以下实现,验证后符合要求,特此记录一下. import ja ...

  7. java 过滤微信昵称_java过滤微信昵称emoji表情与非emoji的问题解决方法

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 过滤emoji表情与非emoji表情 * @author h ...

  8. 过滤微信昵称emoji表情

    /*** 过滤emoji表情与非emoji表情**/ public class EmojiFilter {/*** 检测是否有emoji字符* @param source 需要判断的字符串* @ret ...

  9. 解决阿里云RDS mysql5.7数据库不能存储微信昵称含特殊表情或字符的问题

    解决阿里云RDS mysql5.7数据库不能存储微信昵称含特殊表情或字符的问题 1.数据库和表的字符集类型设置为utf8mb4: 2.字段字符集设置为utf8mb4. 3.进入阿里云数据库实例管理页面 ...

最新文章

  1. 从算法到产品:NLP技术的应用演变
  2. JavaEE进阶知识学习-----SpringCloud(四)Eureka集群配置
  3. idea创建文件自定义注释
  4. 什么是Django?
  5. JavaSE各阶段练习题----异常
  6. 【 2013华为杯编程大赛成都第三组前两题试题及答案】
  7. 博文视点大讲堂第29期——2天玩转单反相机
  8. 无法卸载K/3处理方法
  9. 分享《通过开源项目去学习》
  10. 如何实现EDIUS中的素材的替换
  11. FDDB评估工具使用
  12. 01-什么是网络爬虫
  13. ERP系统对企业的作用
  14. python读有中文的文件_在python中pandas读文件,有中文字符的方法
  15. 017年Android百大框架排行榜
  16. 微信公众号页面开发记录
  17. (转) 深度学习在目标跟踪中的应用
  18. 全部开源!高仿微信界面
  19. 如何将PDF文件转换成PPT
  20. Hinton 最新研究:神经网络的未来是前向-前向算法

热门文章

  1. 动真格了!清华大学在内的双一流高校拟再次清退一批研究生!
  2. OpenCV 视频操作
  3. 使用DataGrip连接SQL Server2008
  4. UGUI——判断是否点击在UI上
  5. Java 实现计算器
  6. 新起典| 探秘文旅跨界融合新业态
  7. OPPOA59换屏总成
  8. Android 初学模仿微信APP进行简单的界面设计
  9. HTML网页设计制作大作业(游戏主题)---电竞
  10. dat数据图像代码转码可视化