最近在做一个项目,我负责后端,Java开发,DB用的是Mysql,版本5.6.14 ,编码用的是UTF-8。但发现了一个问题,手机端上有Emoji表情,插入Mysql时失败了,报错添加表情失败~;
上百度搜索一下,终于找到了答案。UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。解决方案就是:将Mysql的编码从utf8转换成utf8mb4。网上应该能搜到一大堆修改Mysql编码的方法。
我是这样修改的:
1.utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。
mysql版本查看命令请看:
mysql> select version();
--------------
select version()
--------------
+-----------+
| version() |
+-----------+
| 5.6.14 |
+-----------+
1 row in set (0.00 sec)
mysql安装步骤请看:http://blog.csdn.net/catshitone/article/details/47975961; Linux中升级Mysql到Mysql最新版本的方法
2.修改database、table和column字符集。参考以下语句:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.修改mysql配置文件my.cnf(windows为my.ini)
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
2,先去修改表字段字符集为utf8mb4: ALTER TABLE UGC_REVIEW_CONTENT MODIFY `CONTENT` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '评论内容'; 执行完后,再在手机端的app测试,依然报同样的错误。 3,再去修改表字符集utf8mb4: ALTER TABLE UGC_REVIEW_CONTENT CHARSET=utf8mb4 COMMENT='晒单/推荐的评论内容'; 执行完后,再在手机端的app测试,依然报同样的错误。 4,再去修改数据库的字符集utf8mb4: vim my.cnf init-connect='SET NAMES utf8mb4' character-set-server=utf8mb4 重启mysql数据库 [root@mysqlvm4 ~]# service mysql restart Shutting down MySQL.... [确定] Starting MySQL.............................................[确定].. [root@mysqlvm4 ~]# --------------------------------------------------------------------------------------------------------------------------------