从MySQL5.5.3开始,MySQL 支持一种utf8mb4的字符集,这个字符集能够支持4字节的UTF8编码的字符。utf8mb4字符集能够完美地兼容utf8字符串。在数据存储方面,当一个普通中文字符存入数据库时仍然占用3个字节,在存入一个Unified Emoji表情的时个它会自动占用4个字节。所以在输入输出时都不会存在乱码的问题了。

由于utf8mb4是utf8的超集,从utf8升级到utf8mb4不会有任何的问题,直接升级即可;如果从别的字符集如gb2312或者gbk转化而来,一定要先备份数据库。然后,修改MySQL的配置文件/etc/my.cnf,修改连接默认字符集为utf8mb4,然后在连接数据库以后首先执行一句SQL:SET NAMES utf8mb4;

修改如下:

# cat /etc/my.cnf
# update -- [mysql]
# CLIENT #
port =
socket = /data1/dbdata/mysql.sock
default-character-set = utf8mb4 #关键点1 [mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
character-set-server = utf8mb4 #关键点2

查看可以查看编码是否已经修改成功:

mysql> show variables like 'character%';
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | |
+--------------------------+---------+
rows in set (0.00 sec)

utf8 转utf8mb4就可以支持emoji表情了

当重启mysql后,再次登录的时候,出现下面的情况:

[root@db228 ~]# mysql
mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

http://blog.csdn.net/amao1/article/details/34851533

还需要修改一个修数:

+ +-- lines: <?xml version='1.0' encoding="utf-8"?>------|+ +-- lines: <?xml version='1.0' encoding="utf-8"?>-----
<description>ARMSCII- Armenian</description> | <description>ARMSCII- Armenian</description>
<alias>armscii-</alias> | <alias>armscii-</alias>
<collation name="armscii8_general_ci" id="" order="Arm| <collation name="armscii8_general_ci" id="" order="Ar
<collation name="armscii8_bin" id="" order="Binary"| <collation name="armscii8_bin" id="" order="Binary
</charset> | </charset>
|
<charset name="utf8mb4">#只修改这里(修改后) | <charset name="utf8">
<family>Unicode</family> | <family>Unicode</family>
<description>UTF- Unicode</description> | <description>UTF- Unicode</description>
<alias>utf-</alias> | <alias>utf-</alias>
<collation name="utf8_general_ci" id=""> | <collation name="utf8_general_ci" id="">
<flag>primary</flag> | <flag>primary</flag>
<flag>compiled</flag> | <flag>compiled</flag>
+ +-- lines: </collation>--------------------------------|+ +-- lines: </collation>-------------------------------
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
~ | ~
/usr/share/mysql/charsets/Index.xml , All /usr/share/mysql/charsets/Index.xml.bak , All

修改表的字符集:

mysql> alter table table_name convert to character set utf8mb4 collate utf8mb4_bin;

打印机不能打印"emoji表情"!!!!!!!!所以最好不要存emoji表情。

数据库支持emoji表情的更多相关文章

  1. 教你如何让数据库支持emoji表情符存储

    From: http://www.cnblogs.com/janehoo/archive/2016/04/06/5359800.html 一.教你如何让数据库支持emoji表情符存储 解决方式:更换字 ...

  2. 让MySQL数据库支持Emoji表情

    问题:Emoji 表情是按照4个字节存储的,所以传统 mysql utf-8编码只能最大存储3字节. 解决:修改MySQL(5.5.3以上版本) 编码为utf8mb4 即可存储Emoji表,同时设置 ...

  3. js处理表情字符且让数据库支持emoji表情符存储

    数据库处理 更换字符集utf8-->utf8mb4 JS处理 将表情转为字符: function utf16toEntities(str) { var patt=/[\ud800-\udbff] ...

  4. mysql数据库支持 emoji表情

    关键点: 1. 修改mysql数据库表ALTER table <tablename>  modify <clolum>  char(100) character set utf ...

  5. mysql支持emoji表情符存储

    一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...

  6. mysql数据库字符集相关操作(修改表字段编码,使其支持emoji表情)

    普通的UTF8编码是不支持emoji表情插入的,会报异常: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x9 ...

  7. 数据库需要支持emoji表情

    由于需要实现emoji表情评论的功能,所以数据库需要支持emoji表情的存储,根据查询的资料最终实现了该功能,现将实现的过程以及过程遇到的一些问题记录下来,供大家参考和交流. mysql的utf8编码 ...

  8. MySQL支持Emoji表情

    让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...

  9. MySQL中支持emoji表情的存储

    由于需要实现emoji表情评论的功能,所以数据库需要支持emoji表情的存储,根据查询的资料最终实现了该功能,现将实现的过程以及过程遇到的一些问题记录下来,供大家参考和交流. mysql的utf8编码 ...

随机推荐

  1. caffe学习系列(1):图像数据转换成db(leveldb/lmdb)文件

    参考:http://www.cnblogs.com/denny402/p/5082341.html 上述博文用caffe自带的两张图片为例,将图片转为db格式.博主对命令参数进行了详细的解释,很赞. ...

  2. String与InputStream互转的几种方法

    [java] view plain copy /** * 利用BufferedReader实现Inputstream转换成String <功能详细描述> * * @param in * @ ...

  3. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  4. 使用 PHP 7 给 Web 应用加速

    PHP 20周年了!?? PHP 首发通告,1995年6月8日 发布于 COMP.INFOSYSTEMS.WWW.AUTHORING.CGI 主题:正式宣布:个人主页工具(Personal Home ...

  5. PHP设定错误和异常处理三函数

    register_shutdown_function(array('Debug','fatalError')); //定义PHP程序执行完成后执行的函数 set_error_handler(array ...

  6. do{...}while(0)的意义和用法

    linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢? 实际上,do{. ...

  7. vncserver改变屏幕分辨率

    vncserver -geometry 1600x1200 转自: http://stackoverflow.com/questions/15816/changing-the-resolution-o ...

  8. hdu2457

    AC自动机+DP #include <cstdio> #include <queue> #include <cstring> using namespace std ...

  9. hdu3709

    枚举+数位dp 注意处理数字为0和1的情况. #include <cstdio> #include <cstring> using namespace std; #define ...

  10. 数组里的数据绑定到dataset中

    string [] an = {"a","b","c"};DataTable dt = new DataTable(); dt.Column ...