版本号: 4.1.1

报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

经过万能的排除法后,发现当insert操作时,属性里包含emoji的话会报错,然后进而影响之后的所有update操作也会跟着报错

但是如果没有insert操作的话,直接update操作是不会报错的

目前社区已经有人提bug了,下一版应该会修复这个问题

目前有几种解决方案的思路

1: 官方修复

优点: 不用自己写代码

缺点:需要等

2. 去除emoji字符串

优点: 简单暴力且不用对历史数据进行处理

缺点: 无法存入emoji表情,需要emoji-java的jar包

<dependency><groupId>com.vdurmont</groupId><artifactId>emoji-java</artifactId><version>4.0.0</version>
</dependency>

3. 在数据入库时对emoji表情转码,同样在出库时也进行转码

优点: 能保存emoji表情

缺点: 所有出库的地方都需要进行emoji转码,涉及面比较广,如果数据库本身就使用utf8mb4的话,这样处理就会有点多此一举,因为utf8mb4本身就支持emoji表情,那出库的地方就肯定需要对字符串进行emoji转码,不然就得对历史数据进行处理,才能去掉转码代码块,工作量也挺大的

4. 手动控制事务,先插入去除emoji表情的字符串,然后提交事务,再新建事务重新写入原来有emoji的字符串并进行修改

5. 通过异步事务监听进行处理,也是我接下来要讲的方法

优点: 冇

缺点: 要写代码,到时候还要删代码,同样需要emoji-java包,两次数据库操作

现在分享下个人的临时处理方案

我这边的对象都继承自MybatisPlus的Model对象,所以可以直接用Model的持久化方法 -> updateById()

核心注解:

@Async: 异步注解,需要@EnableAsync支持

@Transactional: spring事务注解

@EventListener: 事件监听注解

@TransactionalEventListener: 事务事件监听注解

Demo:

import com.baomidou.mybatisplus.extension.activerecord.Model;
import org.springframework.context.ApplicationEvent;/*** 事件监听对象*/
public class EmojiEvent<T extends Model> extends ApplicationEvent {private T source;public EmojiEvent(T source) {super(source);this.source = source;}@Overridepublic T getSource() {return source;}
}
import com.baomidou.mybatisplus.extension.activerecord.Model;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;/*** 监听*/
@Component
public class EmojiListen {@Async("emojiPool") // 设置线程池@Order@EventListener(EmojiEvent.class) // 监听事件对象@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) // 监听事务提交后执行public void run(EmojiEvent emojiEvent) {Model model = emojiEvent.getSource();model.updateById(); // Pojo对象继承自MybatisPlus的Model对象,所以可以使用Model.updateById();}/*** 线程池*/@Beanpublic Executor emojiPool() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(20);executor.setQueueCapacity(200);executor.setKeepAliveSeconds(60);executor.setThreadNamePrefix("emojiExecutor-");executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}}
@Service
public class test() {@Autowareprivate ApplicationEventPublisher publisher;@Transactional(rollbackFor = Throwable.class)public void save() {String emoji = "												

ShardingProxy插入Emoji表情报错相关推荐

  1. mysql errorcode 1366_mysql插入emoji表情报 error code [1366]

    问题: 今天再插入一条数据的时候,忽然报错.Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB0\xE5\xA ...

  2. 前端使用node存入数据库emoji表情报错

    2023-02-08 17;44:16,824 EROR 6600 nodejs.,unh andledRejectionError :ER_TRUINCATED MROIS WALUE Fo0R F ...

  3. php json emoji问号,json_encode转码emoji等特殊表情报错

    json_encode转码emoji等特殊表情报错 进行实验一:json_encode($data,JSON_UNESCAPED_UNICODE); $emoji="

  4. java mysql emoj报错_MySQL插入emoji表情报错 SQLException: Incorrect string value 的两种解决方案...

    原因:mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了. 第一种方案:修改数据库表字符集 而mysql为了解决这个问题,在5.5.3版本之后 ...

  5. 记一次解决Mysql:Incorrect string value: ‘\xF0\x9F\x8D\x83\xF0\x9F...‘ for column 插入emoji表情报错问题

    近日在插入mysql数据时,报了一个错'\xF0\x9F\x8E\x80Sa...'的错误,导致数据插入不进去.一看字段名是存储微信昵称的字段,想到的可能是有什么表情符号插入不进去. 通常情况,Mys ...

  6. mysql数据库存表情报错_mysql数据库存表情报错

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. markdown中快速插入Emoji表情包语法速查表!!!

    markdown中快速插入Emoji表情包语法速查表!!!

  8. mysql数据库表中插入中文字段时报错 ‘\xCD\xF5\xBB\xAA‘

    创建表 mysql> CREATE TABLE student( -> s_no VARCHAR(20) PRIMARY KEY COMMENT'学生学号', -> s_name V ...

  9. mysql @符号_quot;Incorrect string value quot; mysql 乱码 my插入emoji Yii2

    发现问题: 用户微信名称中包含emoji表情,无法插入数据库. 数据库报错信息: ERROR 原因: MySQL的文本(varchar,text),对emoji表情符号不是很好的支持,在5.5之前的版 ...

最新文章

  1. kafka原理_Kafka动态配置实现原理解析
  2. 探索 20 年,依然难落地,是谁阻止了教授们的「学术休假」?
  3. nodejs 相关管理工具
  4. 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...
  5. 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
  6. nc65右键生成菜单_DbSchema生成表单和报表,原来如此简单
  7. 禁用win10触摸屏手势_Win10平板边缘滑动手势大全及开启/关闭方法
  8. ROS入门-2.Linux系统基础操作
  9. html5文字收起,科技常识:HTML5给汉字加拼音收起展开组件的实现代码
  10. [转载] Python Dictionary用法小结
  11. Aurelia历险记:创建自定义PDF查看器
  12. mysql三表关联查询
  13. 立体仓库货物识别率99.9%!AI让仓储管理事半功倍
  14. 毕业设计大全——毕业设计参考选题(Jsp+Servlet+SSM+SpringBoot)(持续更新)
  15. 《unix环境高级编程》--- 终端I/O
  16. ubuntu anaconda 3.6.4 zipimport.ZipImportError: can't decompress data; zlib not available Makefile:1
  17. 现代循环神经网络 - 序列到序列学习
  18. 水星nw315r服务器无响应,水星MW315R作为从路由怎么设置? | 192路由网
  19. 2018年9月CSP CCF认证考试 经验
  20. 2022-2028年全球与中国RNA聚合酶抑制剂行业深度分析

热门文章

  1. Android 魔塔小游戏--界面设计以及方向键设计(一)
  2. Elasticsearch教程(27) ES拼接查询条件的工具类
  3. 怎么用计算机弹出逆战,windows10系统运行逆战出现乱码如何修复
  4. 安装sybase12.0,运行时报错异常。
  5. <LandingSite>Focusing Locator识别定位器ID
  6. GLM联合go-cqhttp实现qq群GLM机器人服务器的本地化部署笔记
  7. Go:You-Get 简介
  8. android测试rs232_AM335x的RS232串口的测试程序
  9. 全双工,半双工与CSMA/CD的关系
  10. 手机H5页面如何连接打印机