MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码) 前段时间做项目遇到APP评论中有 emoji 表情符号,结果导致插入 MySQL 数据库失败,时隔好久了,现在整理一下。
+关注继续查看

MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)

前段时间做项目遇到APP评论中有 emoji 表情符号,结果导致插入 MySQL 数据库失败,时隔好久了,现在整理一下。

一、基本原则

如果要实现存储 emoji 表情到 MySQL 实例,需要应用客户端、到 MySQL 实例的连接、MySQL 实例内部 3 个方面统一使用或者支持 utf8mb4 字符集。

注:关于 utf8mb4 字符集,请参考 utf8mb4 字符集(4字节 UTF-8 Unicode 编码)

二、三个条件的说明

1、应用客户端

客户端需要保证输出的字符串的字符集为 utf8mb4。

注:utf8mb4只是MySQL中的概念,因为MySQL的UTF-8并不是真正意义上的UTF-8,我们的应用中只要使用UTF-8就可以了。

2、应用到 RDS MySQL 实例的连接

以常见的 JDBC 连接为例:
对于 JDBC 连接,需要使用 MySQL Connector/J 5.1.13(含)以上的版本。
JDBC 的连接串中,不配置 characterEncoding 选项。连接器会自动匹配识别字符集。
注:关于 MySQL Connector/J 5.1.13,请参考 MySQL 官方 Release Notes
比如

url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&zeroDateTimeBehavior=convertToNull

3、MySQL 实例配置

3.1、修改my.cnf配置文件

这里使用VI来修改,输入命令:vi /usr/my.cnf 回车;打开文件后按“i”键进入编辑状态;
在“[mysqld]”下面添加“character_set_server=utf8mb4”,按Esc键进入命令模式,输入“:wq”回车(保存并退出)。

macOS下的路径可能是:/usr/local/mysql/my.cnf

注意:必须重新启动 MySQL 实例;

3.2、设置库的字符集为 utf8mb4

可以使用工具来设置数据库属性:


3.3、设置表的字符集为 utf8mb4


create table emoji_table (
id int auto_increment primary key,
content varchar(255)
) default charset utf8mb4;

三、通过 set names 命令设置会话字符集

对于 JDBC 连接串设置了 characterEncoding 为 utf8 或者做了上述配置仍旧无法正常插入 emoji 数据的情况,建议在代码中指定连接的字符集为 utf8mb4,样例代码如下:


String sqlCharset = "set names utf8mb4"
Statement statment = conn.createStatement();
resultSet = statment.executeQuery(sqlCharset);
注: set names utf8mb4; 命令会将 character_set_client、character_set_connection、character_set_results 3个会话字符集相关变量均设置为 utf8mb4,以保证写入或者读出的数据使用 utf8mb4 字符集进行解释。
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 原文地址https://blog.csdn.net/testcs_dn/article/details/75533784
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 小程序 关系型数据库
[记录]springboot+mysql存储emoji问题
[记录]springboot+mysql存储emoji问题
|
4月前
|
XML 关系型数据库 MySQL
Mysql插入emoji表情字符编码错误 Incorrect string value: ‘\xF0\x9F\x98\x84\xF0\x9F...‘ for column ‘comment‘ at r
今天在插入数据时发现emoji表情时数据库报错了,以前从来不会报错的,因为我设计表时从来都是如下设置:
92 0
|
4月前
|
存储 SQL 监控
MySQL面试精选:emoji表情存储不进去?
MySQL面试精选:emoji表情存储不进去?
|
6月前
|
存储 关系型数据库 MySQL
Mysql插入emoji表情报错java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB8'
Mysql插入emoji表情报错java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB8'
167 0
|
11月前
|
SQL 关系型数据库 MySQL
MySQL插入Emoji表情
MySQL插入Emoji表情
MySQL插入Emoji表情
|
存储 关系型数据库 MySQL
如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他
如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他
110 0
如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他
|
关系型数据库 MySQL 数据库
Java emoji持久化mysql
Java emoji持久化mysql  好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf-8字符集保存不了保存不了表情字符,这是为什么呢?因为普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点。
833 0
|
SQL Java 关系型数据库
|
存储 关系型数据库 Java
springboot+mybatis+druid+mysql 保存emoji表情
       最近在学习springboot,在练习做一个简单博客系统时遇到了保存emoji表情出错,搜索了半天才搞定。这里记录下来,希望能够帮助到自己或有需要的人不要踩坑。
3798 0
|
存储 关系型数据库 MySQL
微信开发 MySQL 存储 Emoji 表情
之前在开发的时候遇到 utf-8 编码无法存储 Emoji 表情,后面经过研究之后需要用到 utf-8mb4 编码,这里网上很多教程说是要把 数据库、表、字段三个都设置为 utf-8mb4 编码,甚至有的教程需要修改 mysql.conf 配置文件,还需要重启 MySQL。
1668 0
推荐文章
更多