测试环境:
我使用的工具

  • mysql 8.0.17
  • mybatis starter 2.1.1版本

数据库编码utf8mb4,表character也是utf8mb4,collate utf8mb4_general_ci。

上面这个配置,写代码,存表情符,完全没有问题。

生产环境:
我使用的工具

  • mysql 5.7.10-log
  • mybatis starter 2.1.1版本

数据库编码utf8mb4,表character也是utf8mb4,collate utf8mb4_general_ci。

一个insert操作,表中msg字段包含了表情符,结果抛错如下:

\r\n### Error updating database.  Cause: java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x80\\xF0\\x9F...' for column 'msg' at row 1\r\n### The error may exist in file [E:\\cjsc\\wg\\jdk8\\summary\\target\\classes\\mybatis\\BlessMsgMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO t_bless_msg(create_id,msg) VALUES(          ?  ,          ?         )\r\n### Cause: java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x80\\xF0\\x9F...' for column 'msg' at row 1\n; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: '\\xF0\\x9F\\x98\\x80\\xF0\\x9F...' for column 'msg' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x80\\xF0\\x9F...' for column 'msg' at row 1

解决办法:
mapper.xml

  <insert id="save">INSERT INTO t_bless_msg(create_id,msg) VALUES(#{userId}  ,#{msg})</insert><update id="setUTF">SET NAMES utf8mb4</update>

mapper.java

    int save(@Param("userId") Integer userId, @Param("msg") String msg);/*** 临时设置编码* @return*/int setUTF();

serviceImpl.java

     @Override@Transactionalpublic void save(Integer userId, String msg) {//session级别的设置编码,会话内有效blessMsgMapper.setUTF();   //blessMsgMapper为上面的mapper.java类blessMsgMapper.save(userId, msg);}

没错,就是这样,解决了表情符的问题。

主要起作用的是会话级别的编码设置SET NAMES utf8mb4。特别注意,这两个操作要在同一个事务中。

mysql 5.7 版本输入法表情符问题-----java解决办法相关推荐

  1. mysql 输入法表情数据,mysql 5.7 版本输入法表情符问题-----java解决办法

    测试环境: 我使用的工具 mysql 8.0.17 mybatis starter 2.1.1版本 数据库编码utf8mb4,表character也是utf8mb4,collate utf8mb4_g ...

  2. 记一次PHP+Mysql保存微信昵称带表情符失败案例

    记一次PHP+Mysql保存微信昵称带表情符失败案例 bug描述 做微信登陆时,出现部分用户不能等陆. 经过查看日志,发现是因为此部分用户使用了带表情的昵称. Statement could not ...

  3. python安装pyinstaller出现错误_pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)...

    本机中原pyinstaller版本为3.5版本,本打算通过 pip install --upgrade pyinstaller进行升级,竟然报错,后面卸载再重新安装也一样报错,没办法看来通过pip是暂 ...

  4. Win10玩游戏时输入法引起的闪退解决办法

    Win10玩游戏时输入法引起的闪退解决办法 前言 最近用Win10玩大型单机游戏时碰到一个问题,就是在游戏中摁Shift键时会引起游戏卡顿,甚至引起游戏闪退.一开始我以为是电脑的问题,但是电脑配置和设 ...

  5. linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法

    [mysql]linux登录MySQL_报错ERROR_1045_(28000)解决办法 5年前 (2015-09-17)    作者:Jiaozn    分类:MySQL    阅读次数:1852 ...

  6. 关于傲梅分区助手之后盘符错乱以及盘符互换的解决办法

    关于傲梅分区助手之后盘符错乱以及盘符互换的解决办法 相信大家一定遇到过电脑c盘中内存不足的问题 下面来说说我的情况吧,我的电脑是戴尔的xps15-9550乞丐版,只有一个256g的固态 随着软件的越来 ...

  7. 使用MySQL Workbench导出数据库脚本以及出错时的解决办法

    使用MySQL Workbench导出数据库脚本以及出错时的解决办法 正常做法 打开workbench,选择左上角的菜单栏,选择Server->Data 之后出现如下界面 一般情况下,这样就导出 ...

  8. 关于xlrd最新版本不支持.xlsx文件的解决办法

    文章目录 关于xlrd最新版本不支持.xlsx文件的解决办法 解决方案,回退到xlrd1.2.0版本 这是很久之前我就遇到的一个问题,这次又遇到了,发现之前没有写笔记,这次记录一下. 关于xlrd最新 ...

  9. 合击版本异地网关无法正常登录解决办法

    异地网关设置不能正常登录,合击版本异地网关无法正常登录解决办法, 修改BOOT很简单,根据以下步骤就可以完成,修改完毕后,请重起服务器. 修改方法: 点桌面我的电脑-反键-属性-高级-启动和故障恢复- ...

最新文章

  1. Android Scroller与computeScroll方法的调用关系
  2. elasticsearch查询
  3. mysql scott用户_在mysql中创建 oracle scott 用户的四个表及插入初始化数据
  4. 《Python Cookbook 3rd》笔记(2.7):最短匹配模式
  5. 作者:房毓菲(1990-),女,就职于国家信息中心信息化研究部,中国智慧城市发展研究中心政策研究组副组长。...
  6. C++:利用sort()对vector中的数据自定义排序
  7. pack unpack 用法 转载
  8. ios动态创建类Class
  9. PySide2 QCheckBox控件应用
  10. Linux系统手机投屏实现电脑控制手机(Windows)
  11. 由磁场数据和加速度数据计算初始姿态角
  12. 【期末不挂科 数据结构】第一章 绪论
  13. SQL笔试题目分享(一)
  14. 韩国区块链步入快车道:SM、Kakao、三星、LG等巨头ALL IN
  15. HTML如何制作百度首页?代码是什么
  16. 房产税,抑制高房价的最后稻草?
  17. 18天精读掌握《费曼物理学讲义卷一》 第6天 2019.6.19
  18. HTTP请求头部+响应码
  19. 三维格式学习-wrl
  20. 树莓派搭建nextcloud

热门文章

  1. SpringBoot和Vue验证码
  2. 核心单词Word List 46
  3. python按enter退出_【cmd按任意键退出 python】
  4. ios设备备份,更新路径(mac os)
  5. 均值滤波器类型_滤波器的种类归纳
  6. SSD算法详解 及其 keras实现
  7. mysql创建表报错1055的原因_[Err] 1055
  8. android进程通信6,[Android]你不知道的Android进程化(6)--进程通信Andromeda框架
  9. web端的兼容性测试
  10. 调整UE4屏幕分辨率