千家信息网

mysql/Java服务端对emoji的支持与问题的解决方法

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,mysql/Java服务端对emoji的支持与问题的解决方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。问题描述将底层抓取的微博数据存
千家信息网最后更新 2025年02月01日mysql/Java服务端对emoji的支持与问题的解决方法

mysql/Java服务端对emoji的支持与问题的解决方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

问题描述

将底层抓取的微博数据存入mysql,有些数据存入失败,查看Tomcat后,核心错误信息如下:

// 抛出字符集不支持的异常sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1

原因分析

MYSQL 5.5 之前, utf8 编码只支持1~3个字节,即BMP这部分的unicode编码区(基本就是0000~FFFF这一区)。 Emoji表情是4个字节,而mysql的utf8编码最多3个字节,所以导致数据插不进去 5.5之后,mysql加入utf8mb4编码,可支持4个字节,即一个字符最多能有4字符,因此utf8mb4编码可支持更多的字符集。 因此,如果项目要存储移动产品的用户文本,必须将DB字符集从UTF8/GBK等传统字符集升级到utf8mb4

【注】

utf8mb4兼容utf8,且比utf8能表示更多的字符。所以将DB字符集从UTF8或GBK等传统字符集升级到utf8mb4时不用担心字符的兼容性问题

解决方法

过滤特殊的表情符

content = content.replaceAll("[\\x{10000}-\\x{10FFFF}]", "");// 简单粗暴,不人性化

升级数据库字符集

1、utf8mb4支持的mysql版本为5.5.3+,若mysql低于该版本请先升级

2、修改database、table和column字符集

3、修改mysql配置文件my.cnf(windows为my.ini),my.cnf一般在etc/mysql/目录下,找到后在以下三部分里添加如下内容:

[client] default-character-set = utf8mb4

[mysql] default-character-set = utf8mb4

[mysqld]character-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'

4、重启mysql并查看字符集

在mysql命令行输入:

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

重启之前的字符集

重启之后的字符集

【注】

必须保证以下字段为utf8mb4 character_set_client character_set_connection character_set_database character_set_results character_set_server

以上4步完成后,利用mysql客户端navicat在表中手动加入Emoji表情⛄,若能保存成功说明数据库已升级成功。

这些字符集配置的具体区别参考 深入Mysql字符集设置

5、检查服务器端db配置文件

// 配置spring时使用的链接如下:url="jdbc:mysql://localhost:3306/gzhou?allowMultiQueries=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&autoReconnectForPools=true&failOverReadOnly=false&maxReconnects=10"// 若characterEncoding=utf8mb4,插入数据时报错Caused by: java.sql.SQLException: Unsupported character encoding 'utf8mb4'// 去掉characterEncoding或characterEncoding=utf8

Emoji表情

android系统中,搜狗、百度输入法自带Emoji表情。

【注】

如果系统之间Emoji表情符号不兼容,只能看到方块;

看完上述内容,你们掌握mysql/Java服务端对emoji的支持与问题的解决方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

字符 字符集 支持 问题 数据 表情 方法 编码 升级 字节 更多 配置 服务 内容 成功 传统 原因 数据库 文件 版本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 mac怎么进入服务器 以数据库建设推动经济发展 安徽医院软件开发公司哪家好 北京桥光互联网科技有限公司 中国国家网络安全官网 多台云服务器如何部署系统 审计是数据库安全性的监控措施 洛阳中智软件开发有限公司怎么样 2019招软件开发工程师 学校网络安全 注意事项 机器人软件开发专业前景 软件开发工程师证书什么样 数据库连接18456 数据库视图禁止修改吗 铜山区口碑好的软件开发常见问题 mc商业服务器收入 手机基岩版怎样开服务器 java语言软件开发包 数据库往里添加数据 子墨网络技术 企业服务器配置 孝感市辉腾网络技术有限公司地址 腾讯公司的服务器配置 不是网络安全防范措施 软件开发基础教学视频高清 上海品牌软件开发定制优势 网络安全体系如何构建 网络安全专项清理整治责任书 我国网络安全人才的需求状况 数据库能取消主键吗
0