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

mysql数据库存储位置(最令人反感的emoji表情)

utf8mb4是utf8的超集,mb4就是mostbytes4的意思,专门用来兼容四字节的Unicode,MySQL在5.5.3之后增加了utf8mb4的编码。MySQL支持的ut


00-1010在最近的项目中存储表情包时报告了一个错误:


###原因: Java . SQL . Sqlexception :第1行的列“column1”的字符串值: '\xF0\x9F\x98\x81 '不正确


;未分类的SQLExceptionSQL状态[HY000];错误代码[1366];第1行“column1”列的字符串值:“\ xF0 \ x9F \ x98 \ x81”不正确;嵌套异常为java.sql.sqlexception :错误的字符串值3360' \ xf0 \ x9f \ x98 \ x81 '位于第[现象]行的列“column1”此问题是由数据库的编码方法引起的。首先,让我们了解utf8和utf8mb4之间的区别:


Utf8通常指UTF-8,这是Unicode的可变长度字符编码。每个字符最多有三个字节,有时称为utf8mb3。


Utf8mb4是utf8的超集,mb4表示大部分字节4,专门用来兼容四个字节的Unicode。MySQL在5.5.3之后增加了utf8mb4编码。


MySQL支持的utf8编码最大字符长度为3字节。如果遇到4字节宽的字符,将会插入一个异常。三个字节的utf8可以编码的最大Unicode字符是0xffff。任何不在基本多文本平面的Unicode字符都不能被MySQL utf8字符集存储,包括表情符号和许多不常见的汉字,以及任何新的Unicode字符等。如果要在MySQL中保存4字节utf8字符,需要使用utf8mb4字符集。从上面我们可以看到,如果要存储表情符号,那么数据库的编码方式需要是utf8mb4。接下来,让我们看看数据库和数据库链接的配置:


查看数据库代码,可以看到数据库代码已经是utf8mb4了。


显示像“character_set_database”这样的变量;


查看项目中数据库链接的配置,我们可以看到设置了复杂的日落=utf8。


JDBC : my SQL :/$ { MySQL . host } : $ { MySQL . port }/$ { MySQL . db }?UseUnicode=true complex sunset=utf8 zero datetime behavior=convert toll注意:无论是使用utf8编码还是utf8mb4,数据库链接url中的complex sunset都设置为utf8(或UTF-8),没有complex sunset=utf8mb4这样的写法。


由于数据库代码是utf8mb4,并且在数据库链接url中设置了复杂的日落=utf8,为什么表情存储仍然会报告错误?


根据研究,原来pom.xml中的mysql-connector-java版本号在起作用。


mysql-connector-java版本支持utf8mb4字符集,如下所示:




项目中使用的mysql-connector-java版本号为5.1.45。从上表中,有必要设置mysql服务器配置文件:


vi /etc/my.cnf


[mysqld]


设置字符集-服务器=utf8mb4后,重启mysql服务,再次运行project服务,就可以将表情包写入数据库表中了。


有时候,我们没有权限修改mysql服务器配置文件,重启mysql服务。此时我们可以将mysql-connector-java版本号更改为5.1.47或以上或8.0.13或以上,然后就可以在不修改mysql服务配置文件的情况下存储表情符号了。


然而,mysql-connector-java的版本号并不是我们想要改变的。它与mysql版本和java版本有关:


Mysql-连接器-java和MySQL版本:




其中,官方推荐MySQL 5.6或以上版本使用connector/j 8.0。


MySQL-连接器-java和java版本:




其中,JRE 1.7要求连接器/J 5.1.21或以上。


至此,大家应该都知道如何解决表情存储的问题了:首先根据mysql版本和Java版本选择对应的mysql-connector-Java,然后根据mysql-connector-java版本选择对应的解决方案。


有时,我们的mysql-connector-java版本太低(可能是历史项目中的mysql或java版本太低)或者我们无法更改mysql服务器配置文件。我们也可以用第二种方案来存储表情符号:前端或后端在书写时对用户数据进行编码和解码,前端或后端在显示时对用户数据中的表情符号进行编码和解码。因为这个解决方案不推荐,我们就不谈了,可以上网。


如果对你有帮助,请点一个“喜欢”,谢谢~


推荐阅读
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • C# 中 SQLite 报错:在 "\\s\\" 附近出现语法错误,如何解决? ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 基于试题数据的智能化管理平台采用Java语言进行面向对象编程,旨在构建一个高效的试题信息管理系统。该系统在JDK 6.0和MyEclipse 10.6环境下开发,通过优化试题数据管理和处理流程,提升系统的稳定性和用户体验。平台支持多用户操作,具备强大的数据处理能力和灵活的扩展性,适用于各类教育机构和考试组织。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在将Excel数据导入MySQL数据库的过程中,如何确保不会生成重复记录?本文介绍了一种方法,通过PHP脚本检查数据库中是否存在相同的“Code”字段值,从而避免重复记录的产生。该方法不仅提高了数据导入的准确性,还增强了系统的健壮性。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • 在实际开发中,连接池是最常使用的数据库管理技术之一。连接池通过创建和管理一组预初始化的数据库连接,使得这些连接可以被多个线程复用,从而显著提高应用程序的性能和资源利用率。本文将详细介绍如何从零开始构建一个自定义的 MySQL 连接池,并将其与 Spring Data 进行集成,以实现高效、可靠的数据库操作。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
mobiledu2502855037
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有