最近在做即时聊天功能,需要支持 emoji 表情,测试直接发送时后台 mysql 数据库会报类似 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B' 这样的错误。

原因:

由于 emoji 是 utf-16 编码,占四个字节,而 mysql 是 utf-8,正常汉字不会超过三个字节

解决:

将 四字节 utf-16 的 emoji 转换成字符串存到数据库中,显示的时候再将字符串转换成 四字节的 utf-16

// 将 emoji 表情转换为字符串
function utf16toEntities(str) {var patt=/[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则str = str.replace(patt, function(char){var H, L, code;if (char.length===2) {H = char.charCodeAt(0); // 取出高位L = char.charCodeAt(1); // 取出低位code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法return "&#" + code + ";";} else {return char;}});return str;}// 将字符串转换为 emoji 表情
function uncodeUtf16(str){var reg = /\&#.*?;/g;var result = str.replace(reg,function(char){var H,L,code;if(char.length == 9 ){code = parseInt(char.match(/[0-9]+/g));H = Math.floor((code-0x10000) / 0x400)+0xD800;L = (code - 0x10000) % 0x400 + 0xDC00;return unescape("%u"+H.toString(16)+"%u"+L.toString(16));}else{return char;}});return result;}

参考:https://blog.csdn.net/dingsai88/article/details/79299232

mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'相关推荐

  1. ### Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x96\x8B \xE7...‘ for column ‘con

    目录 前言: 插入数据库异常报错信息如下,xshell服务器后台抓取的异常信息 插入失败原因,原因定位说明 数据库配置操作命令,解决方案一 java层面的最简洁的解决方案二[推荐] 网上一些其他的方案 ...

  2. java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8E' for column 'nick' at row 1

    mysql报错:  java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8E' for column 'nick' at r ...

  3. 解决 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...'

    java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F-' 问题: 因为表情符号存入Mysql数据库字符串不兼 ...

  4. 【MySQL】Java.sql.SQLException Incorrect string value: \xF0\x9F\x98\x8D\xE8\xBE...

    1.背景 因为用markdown写入的文件,现在要导入到mysql数据库,但是导入的时候报错如下. 原因是该种字符串为Emoj表情内容,每个字符占用4个字节,在Mysql中默认最大支持3个字节,超长了 ...

  5. MySql中报错:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xBB' for column

    将表格的charset改为utf-8 alter table table_name charset =utf8;

  6. 已解决Cause: java.sql.SQLException: Incorrect string value: ‘\\xF0\\x9F\\x8C\\xB8 \\xE5...‘报错

    保存订单存入数据库时,报错: "\n### Error updating database. Cause: java.sql.SQLException: Incorrect string v ...

  7. 终极解决MySql: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x8C\x9D\xF0\x9F...‘ for column

    1.异常 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\x9D\xF0\x9F...' for column '' at r ...

  8. java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x90\xB1\xF0\x9F...‘解决

    mysql 字符存在表情包 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB1\xF0\x9F-' for column ...

  9. java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\x9B],...' for column 'DESCR' at row 1问题

    今天在项目中碰到这样的报错,原因是特殊字符无法插入数据库,只需要将数据库字段做以下修改: 项目为微信公众号,其中微信用户的昵称,当你读取保存的时候用户的微信昵称可能包含特殊字符 所以在数据库所有有关保 ...

最新文章

  1. 从XXX 产品的失败谈起
  2. 用「我的世界」自动生成「现实世界」:英伟达展示AI脑补新技术
  3. 2-2 LU crout 分解
  4. 易语言webservice接口_易语言语音通知webservice接口
  5. JavaScript 面向对象编程实现
  6. 《Adobe Illustrator CS5中文版经典教程》—第0课0.5节使用绘图模式
  7. 连续三年蝉联第一,Flink 荣膺全球最活跃的 Apache 开源项目
  8. 一线大厂为什么对免费的开源项目这么热衷?
  9. 2020双十一实时大屏_2020拼多多双十一,拼多多双十一活动
  10. fastjson把对象转化成json避免$ref
  11. 排序算法 -- 待增加
  12. 关于java网络编程的实例代码
  13. keras报错ModuleNotFoundError: No module named ‘keras.backend.tensorflow_backend‘;
  14. WEB开发常用软件集合
  15. Linux下的TCP测试工具
  16. Office Word 2010 2013 插入复选框 方框打勾 对号
  17. 提问的力量四:提问的艺术-体验学习中提问的技巧
  18. 自制的Arduino多级菜单类
  19. 通过添加dns加速访问app store
  20. vue 手风琴效果_Vue实现侧边菜单栏手风琴效果实例代码

热门文章

  1. 【FPGA】——UART串口通信
  2. 内核中接收网络帧的处理
  3. ILI9341液晶LCD彩色显示原理
  4. GitHub使用入门讲解--官方文档翻译让你最真实了解
  5. 单目视觉里程计 mono vo
  6. ROS : 修改ROS源代码(overlaying package)
  7. synchronized实现同步的原理和锁状态
  8. UDP \TCP详详详详解,你想要的全都有(呕心沥血)
  9. 【LeetCode】【HOT】287. 寻找重复数(抽象环形链表)
  10. mysql实现主从复制