热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL插入emoji表情错误的3种解决方案,Incorrectstringvalue:'xF0x9Fx98x84'

MySQL插入emoji表情错误的3种解决方案,Incorrectstringvalue:'xF0x9Fx98x84',Go语言社区,Golang程序员人脉社

原因:mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了。

而mysql为了解决这个问题,在5.5.3版本之后转而支持了存储4个字节的utf8字符,字符集为utf8mb4.这个相当于windowsX64和windowsX86的区别,64位是兼容32位的,也就是说utf8mb4存取utf8都是没有问题的。

那么在有表情的字段上就应该这样做,将该字段设置为utf8mb4

 ALTER TABLE table_name MODIFY  colum_name  VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

然而你还需要设置下表的字符集

 ALTER TABLE table_name CHARSET=utf8mb4;

当然你可能还需要设置本数据库为utf8mb4啊

 SET NAMES utf8mb4

然后启动起来。

可是在服务器和数据库连接的地方怎么办?

jdbc.url=jdbc:mysql://localhost:3306/aaa?useUnicode=true&characterEncoding=utf-8

这里这个utf-8要改成utf8mb4吗?

貌似不能改啊,数据库驱动就这些编码,没法改啊,一改就出错,不过没事,这是可以兼容的,对于jdbc的驱动来说.

既然没事,那就测试存储吧。

我不清楚原理,只知道现象。

那么接下来会出现两个现象,

第一:你可以存储表情了。

第二:由于未知原因,你还是不能存储表情。

对于第二种情况的同学,我要告诉你的是,当你去操作这些需要加入表情的字段之前,请插入这条sql语句。

 SET NAMES utf8mb4

即可。

也就是说每次插入啊修改啊之前都set一次就没有问题了。

相信我,绝对可行。

当然,有更省事的方法,那么以上几段话当我没说,啥东西都不用改,我们从另一个角度来看问题,其实我们在存的时候过滤掉表情即可,就不用担心以后各种取各种兼容各种显示了。



    com.vdurmont
    emoji-java
    4.0.0

这个包里,有这个方法

String string = EmojiParser.removeAllEmojis(param);

ok了。拿到这个来存不就行了吗?

第三种方案:

字符串是万金油,但是字节数组是万金油之王.我们可以对这种字段不存储varchar类型,而是存储varbinary,

这是一种可变的二进制存储.对应的java类型则是byte[]

例子:

        String aa ="?";
        Test record = new Test();
        record.setV2(aa.getBytes("utf-8"));
        mapper.insert(record);
        System.out.println(mapper.selectByPrimaryKey(2));

       //Test [id=2, v1=null, v2=?]

由此方案可以延伸出存储字节数组的字符串形式/base64形式等,其本质均是存储的字节数组. 


推荐阅读
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 编码unicode解决了语言不通的问题.但是.unicode又有一个新问题.由于unicode是万国码.把所有国家的文字都编进去了.这就导致一个unicode占用的空间会很大.原来 ... [详细]
author-avatar
手机用户2502869883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有