让mysql支持emoji表情
一、问题及原因
APP产品想对Emoji进行支持,但发现mysql数据库无法写入表情。原因是我们的mysql数据库默认用的是utf8编码,utf8编码存储时用的是三个字节,但Emoji表情是4个字节,所以导致了数据插入异常。
原因找到了就很好办,mysql5.5.3之后的版本支持utf8mb4编码,这种编码是utf8的升级版,用的是4个字节进行存储。所以需要做的就是把mysql字符集从utf8升级为utf8mb4就行了。
二、升级步骤
1、备份数据库
虽然utf8mb4兼容utf8,但最好还是作个数据库备份。
2、升级mysql版本到5.5.3以上
这个就不说了,根据你的服务器系统做mysql升级。
3、修改服务器上mysql默认编码,修改数据库、表、列的字符集为utf8mb4
修改服务器上mysql配置文件my.conf(如ubuntu为例,一般在/etc/mysql/my.conf):
[client]
#xxx 已有配置
default-character-set = utf8mb4 [mysql]
#xxx 已有配置
default-character-set = utf8mb4 [mysqld]
#xxx 已有配置
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
改完要重启mysql。
修改数据库、表、列字符集:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这里看到没有修改列的字符集,因为我试过后发现,改了表的字符集后,表中列的字符集自动修改为utf8mb4了。
改完可以查看一下:

这里要确保红框内变量值是utf8mb4。

可以看到列的字符集已经改过来了。
4、检查列的最大长度及索引
这个就根据情况自己检查调整了。
5、修改客户端连接程序编码
把代码中连接数据库时的字符集设置为utf8mb4即可
参考文章:
1、How to insert utf-8 mb4 character(emoji in ios5) in mysql?
2、https://segmentfault.com/a/1190000000616820
让mysql支持emoji表情的更多相关文章
- MySQL支持Emoji表情
让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...
- mysql支持emoji表情符存储
一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...
- mysql 支持emoji表情
在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column ' ...
- 转:让MySQL支持emoji表情
转自:http://www.cnblogs.com/suifu/p/5848269.html 公司有新要求,ios客户端要上线评论中可以使用emoji表情的功能,在mysql 5.5 之前,UTF-8 ...
- 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' ...
- 让MySql支持Emoji表情存储
java后台报错,如下. aused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column ...
- 让Mysql支持Emoji表情,解决[Err] 1366 - Incorrect string value: '\xF0\xA3\x84\x83'
mysql insert内容包含表情或者unicode码时候,插入Mysql时失败了,报如下异常: java.sql.SQLException: Incorrect string value: '\x ...
- php mysql支持emoji表情方案
将emoji转换成utf8 然后存储到数据库,但是 效率低 public function rrr($text) { $text = 'a
- 让mysql 支持 emoji 表情
1.数据库配置 [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] ch ...
随机推荐
- SQL Server 2008 R2——ROW_NUMBER() 去掉不同行中相同列的重复内容
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- SQL Server 分隔字符串函数实现
在SQL Server中有时候也会遇到字符串进行分隔的需求.平时工作中常常遇到这样的需求,例如:人员数据表和人员爱好数据表,一条人员记录可以多多人员爱好记录,而往往人员和人员爱好在界面展示层要一并提交 ...
- mysql密码相关
Windows中修改密码在不同场景下,有以下几种方案: 方法1:用SET PASSWORD命令,具体更新密码步骤如下: c:>mysql -u root mysql>set passw ...
- Linux小技巧总结
1.fdisk创建磁盘分区不重启系统partprobe 使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs磁盘分区则需要重启系统才能够读取到/dev/sda*,而使用partprobe则可以使 ...
- 描述Linux shell中单引号,双引号及不加引号的简单区别(计时2分钟)
简要总结: 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么. 双引号: 把双引号内的内容输出出来:如果内容中有命令.变量等,会先把变量.命令解析 ...
- [转载] python的sorted函数对字典按key排序和按value排序
1.sorted函数按key值对字典排序 先来基本介绍一下sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参 ...
- Tomcat免安装配置2
Tomcat 是一款优秀的JSP/Servlet容器,最初由SUN开发,后来被贡献给了Apache社区.Tomcat现在的版本已到6.Tomcat6实现了Servlet2.5和JSP2.1规范.针对w ...
- 大话设计模式C++版——装饰模式
女人常说男人喜新厌旧,只见新人笑,那闻旧人哭,但装饰模式(Decorator)却是一种结交新朋友不忘老朋友的设计模式,非常适合去古代当老公(现代是不行的,因为只能娶一个老婆了).装饰模式的本质是每一个 ...
- 又是周六了-MySQL特训
hi 又是周六,又是磨蹭个一上午~午饭后开始吧 1.MySQL -----子查询与连接(三)----- ----使用INSERT...SELECT插入记录 --数据库内容的英文版本 由于我的WAMP中 ...
- Java与模式读书笔记
>设计目标:可扩展性,灵活性,可插入性. >设计原则 ● Open Closed Principle 开闭原则 对扩展开放,对修改关闭. 对面向对象的语言来说,不可以更改的是系统的抽象层, ...