java向MySQL数据库储存表情包的那些事儿

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 相信很多小朋友都遇到过这样一个问题:将表情包插入到mysql数据库中表的一个字段中,总是报错,无法找到解决问题的方法,我之前也没有遇到这个问题,可能是我的开发时间少了,没有碰到过;但是今天,客户在对项目进行测试使用的时候,客户使用微信登录小程序,一直报错,最后项目总监找到我让我帮忙处理,然后我进行了一系列操作......

mysql使使

org.springframework.jdbc.UncategorizedSQLException: 
###Errorupdatingdatabase.  Cause: java.sql.SQLException: Incorrectstringvalue: '\xF0\x9F\x90\xB6'forcolumn'nickname'atrow1###Theerrormayexistincom/zbkj/crmeb/user/dao/UserDao.java (bestguess)
###Theerrormayinvolvecom.zbkj.crmeb.user.dao.UserDao.insert-Inline###Theerroroccurredwhilesettingparameters###SQL: INSERTINTOeb_user  ( account, pwd,        nickname, avatar, phone, sex,           spread_uid, spread_time, user_type,    addres )  VALUES  ( ?, ?,        ?, ?, ?, ?,           ?, ?, ?,    ? )
###Cause: java.sql.SQLException: Incorrectstringvalue: '\xF0\x9F\x90\xB6'forcolumn'nickname'atrow1

       怀sql'\xF\x9F\x90\xB6'"nickname"emojiemoji线utf8mb4~~

       bugutf8mb4emoji

       ~~~~

jdbcyml

   便线......

#设置数据库支持emoj表情包
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.datasource.dbcp2.connection-init-sqls=SET nickName utf8mb4

pom.xml

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.1.1</version><scope>runtime</scope></dependency>

javaemoji

   ~使JavaEmojiConverter

   mven

<dependency><groupId>com.github.binarywang</groupId><artifactId>java-emoji-converter</artifactId><version>0.1.1</version></dependency>

   

privatestaticEmojiConverteremojiConverter=EmojiConverter.getInstance();
/*** 带有表情的字符串Emoji转义为unicode,类似🐶。* emoji--->unicode字符串** @param emoji* @return*/publicStringemojiConverter2Html(Stringemoji) {
Stringresult=null;
if (null!=emoji&&emoji.length() >0) {
result=emojiConverter.toHtml(emoji);
        }
returnresult;
    }
/*** 将emojiStr转为 带有表情的字符* unicode--->emoji* @param emojiStr* @return*/privateStringemojiConverter2Unicode(StringemojiStr) {
Stringresult=null;
if (null!=emojiStr&&emojiStr.length() >0) {
result=emojiConverter.toUnicode(emojiStr);
        }
returnresult;
    }
/*** 带有表情的字符串Emoji转义为关键字,类似":dog:"** @param str* @return*/publicstaticStringemojiConverter2Alias(Stringstr) {
Stringresult=null;
if (null!=str&&str.length() >0) {
result=emojiConverter.toAlias(str);
        }
returnresult;
    }

jackson~~

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
41 1
|
1月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
52 0
|
2月前
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
30天前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
538 67
|
14天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
1月前
|
关系型数据库 MySQL Java
java协程操作mysql数据库
本文介绍了如何在Java项目中使用虚拟线程和协程操作MySQL数据库,并通过代码示例展示了如何利用CompletableFuture实现非阻塞数据库连接和操作。
25 2
java协程操作mysql数据库
|
24天前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
2月前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
2月前
|
Java API 数据处理
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
|
2月前
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。