Springboot 插入mysql数据包含表情标错Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F

news/2024/10/22 13:35:53/

项目上线后,一直很稳定,后来加入了微信登录后,有反馈说异常。排查得出结果是mysql插入的数据包含表情。特此记录下。

首先分析为什么会出现这样的情况,原因在于我们的评论数据中存在emoj表情,而这些表情是按照四个字节一个单位进行编码的,而我们通常使用的utf-8编码在mysql数据库中默认是按照3个字节一个单位进行编码的,正是这个原因导致将数据存入mysql数据库的时候出现错误,那么这个问题我们应该怎么解决呢?

  1. mysql数据修改

    1. 检查数据库编码是不是uft8mb4
    2. 检查表内的要存储的字段是不是uft8mb4
    3. 手动sql插入条带表情的数据是不是成功。
  2. 修改springboot配置文件

    1. 如果是用的默认配置的话,那么需要在applciation.yml中增加如下:
spring:datasource:url: jdbc:mysql://XXX:3306/XXX?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=trueusername: rootpassword: root #tomcat:init-s-q-l: SET NAMES utf8mb4 //这是最重要的一步
  1. 如果是使用的数据库连接池,那么需要手动配置。如Druid:
        @Bean     //声明其为Bean实例@Primary  //在同样的DataSource中,首先使用被标注的DataSourcepublic DruidDataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(url);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);//configurationString connectionInitSqls = "SET NAMES utf8mb4";StringTokenizer tokenizer = new StringTokenizer(connectionInitSqls, ";");//重点设置该参数datasource.setConnectionInitSqls(Collections.list(tokenizer));//configurationdatasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);try {datasource.setFilters(filters);} catch (SQLException e) {System.err.println("druid configuration initialization filter: " + e);}datasource.setConnectionProperties(connectionProperties);return datasource;}

http://www.ppmy.cn/news/235559.html

相关文章

JAVA.SQL.SQLEXCEPTION: INCORRECT STRING VALUE: '\XF0\X9F\X92\X94' FOR COLUMN 'CONTENT' AT ROW 1

标签: Mysql存储表情 Mysql支持Emoji java.sql.SQLException \xF0\x9F\x92\x94 for column 使用Mysql服务器的utf8字符编码,在存入移动端emoji表情时会报异常: Caused by: java.sql.SQLException: Incorrect string value: \xF0\x9F\x98\…

mysql存储emij表情_【MySQL】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案...

Emoji表情字符现在在APP已经广泛支持了。但是MySQL的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常: Java.sql.SQLException: Incorrect string value: \xF0\x9F\x98\x8E for column nick at row 1 1 原因是Mysql里UTF8编码最多只能支持3个…

mysql报错:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1

错误:Incorrect string value: ‘\xF0\x9F…’ for column ‘XXX’ at row 1 这个问题,原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。 我…

java 字节替换_java 替换四个字节的字符 apos;\xF0\x9F\x98\x84\xF0\x9F)的解决方案 - 好库文摘...

/** * 替换四个字节的字符 \xF0\x9F\x98\x84\xF0\x9F)的解决方案 😁 * author ChenGuiYong * data 2015年8月11日 上午10:31:50 * param content * return */ public static String removeFourChar(String content) { byte[] conbyte content.getBytes(); for (int…

【SemiDrive源码分析】【X9芯片启动流程】08 - X9平台 lk 目录源码分析 之 目录介绍

【SemiDrive源码分析】【X9芯片启动流程】08 - X9平台 lk 目录源码分析 之 目录介绍 一、/rtos/lk/ 目录结构分析1.1 /rtos/lk_boot/ 目录结构分析1.2 /rtos/lk/ 目录结构分析本 SemiDrive源码分析 之 Yocto源码分析 系列文章汇总如下: 《【SemiDrive源码分析】【Yocto源码分析…

【SemiDrive源码分析】【X9芯片启动流程】14 - freertos_safetyos目录Cortex-R5 SafetyOS/RTOS工作流程分析

【SemiDrive源码分析】【X9芯片启动流程】14 - freertos_safetyos目录Cortex-R5 SafetyOS/RTOS工作流程分析 一、SafetyOS 工作流程分析1. 汇编入口 arch\arm\arm\start.S 初始化CPU、Stack等环境后跳转lk_main()2. lk_main() 并执行 bootstrap2线程2.1 汇总所有 .lk_init 段中…

【MySQL】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案...

Emoji表情字符现在在APP已经广泛支持了。但是MySQL的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常: Java.sql.SQLException: Incorrect string value: \xF0\x9F\x98\x8E for column nick at row 1 1 原因是Mysql里UTF8编码最多只能支持3个…

Micropython——L298N电机驱动模块

文章目录 L298N电机驱动模块PWM调速原理 编码器电机接线直流电机接线PWM代码 L298N电机驱动模块 L298N 电机驱动模块可以直接驱动两路 3-16V 直流电机,并提供了 5V 输出接口(输入最低只要 6V),可以给5V单片机电路系统供电 &#…