MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545}
span.s1 {font: 12.0px '.PingFang SC'}
前段时间做项目遇到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 字符集进行解释。
相关阅读
utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
CentOS下安装MySQL,Windows下使用Navicat for MySql连接
MySQL学习(二)图形界面管理工具Navicat for MySQL安装和使用
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.PingFang SC'; color: #454545}
span.s1 {font: 12.0px '.PingFang SC'}
span.s2 {font: 12.0px 'Helvetica Neue'}p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {font-variant-ligatures: no-common-ligatures}
MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)的更多相关文章
- mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】
utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程 ...
- MySQL保存 emoji 表情(微信昵称表情)
问题分析 在微信开发过程中,总是会遇到带有emoji表情昵称的微信用户无法自动登录的问题. 后台代码抛出类似下面的异常信息. java.sql.SQLException: Incorrect stri ...
- mysql 支持emoji表情
在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column ' ...
- MySQL支持Emoji表情
让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...
- 转:让MySQL支持emoji表情
转自:http://www.cnblogs.com/suifu/p/5848269.html 公司有新要求,ios客户端要上线评论中可以使用emoji表情的功能,在mysql 5.5 之前,UTF-8 ...
- mysql中emoji表情存储
mysql中emoji表情存储 背景 在mysql 5.7.19,创建的数据库默认选择的编码是utf8 -- UTF-8 Unicode,因此字段默认的编码为utf-8,但在项目开发中存在一个需求:在 ...
- MySQL插入emoji表情失败问题的解决方法
前言 之前一直认为UTF-8是万能的字符集问题解决方案,直到最近遇到这个问题.最近在做新浪微博的爬虫, 在存库的时候发现只要保持emoji表情,就回抛出以下异常: Incorrect string v ...
- 一个emoji引发的一条血案:mysql存储emoji表情字符时报错解决
以下是我插入一条带表情的数据到mysql后出现错误 2019-03-04 14:24:40,462 ERROR 2807 [-/139.199.27.244/-/2ms POST /api/activ ...
- mysql保存emoji表情,utf8mb4保存不了表情的问题
报错信息 : Incorrect string value: '\xF0\x9F\x99\x85\xE2\x80...' for column 'content' at row 1 mysql数据库的 ...
随机推荐
- ES6的十个新特性
这里只讲 ES6比较突出的特性,因为只能挑出十个,所以其他特性请参考官方文档: /** * Created by zhangsong on 16/5/20. */// ***********Nu ...
- python16_day07【class】
一.初识类 1.类的两种作用:属性引用和实例化 class Garen: #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄; camp='Demacia' #所有玩家的英雄(盖伦)的阵营都是Dem ...
- this与super关键字总结
Ⅰ.this 用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法.类里面也有一个引用来访问自己的属性和方法,这个引用就是 this 对象,它可以在类里面 ...
- Powerdesiger使用技巧
1.问题:使用CDM在生成LDM文件时,每次都生成Name(LDM)1,Name(LDM)2这样 , 同时遇到一个莫名其妙的问题,就是LDM或者PDM生成到了整个工程外的目录下 疑问回答:是因为原有的 ...
- windows8系统安装MongoDB 2.6.3配置服务启动
转自:http://winfan.net/655.html 1. 下载mongodb包2. 解压zip至 D:\MongoDB3. 创建目录 D:\MongoDB\data\db4. 创建日志目录 D ...
- LeetCode:N叉树的层次遍历【429】
LeetCode:N叉树的层次遍历[429] 题目描述 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2, ...
- 通过FFmpeg将多媒体文件解码后保存成Bmp图像(YUV420 RGB32)
/* g++ -o test test.cpp -lavformat -lavcodec -lavutil -lz -lm -lpthread -lswscale */ #include <st ...
- [HEOI2016/TJOI2016]求和(第二类斯特林数)
题目 [HEOI2016/TJOI2016]求和 关于斯特林数与反演的更多姿势\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ Ans&=\sum\l ...
- RegExp方法解析
RegExp 正则表达式(regular expression)的缩写 语法: 显式构造函数 var rg= new RegExp(pattern, attributes) 隐式构造函数 var rg ...
- Spring_Bean 之间的关系
beans-relation.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns=& ...