0%

升级mysql数据库字符集为utf8mb4

之前公司的项目中一直使用的mysql版本(5.1.73),使用utf8字符集,基本上没有什么问题的;
之前的mysql版本
现在开始做一些手机客户端之类的项目,发送表情(emoji)的时候会报错“ ‘\xF0\x9F\x98\xB1’ for column ‘body’ at row 1”;
发送表情报错

Google了一把,原因是因为表情存储需要4个字节,但是mysql的utf8字符集编码只支持1-3个字节,存储空间不够就报错了,因此需要升级一下字符集。
MYSQL 5.5.3之后的版本支持UTF8MB4字符集,一个字符最多能有4字节,此字符集也是完全兼容utf8的,不存在兼容性问题。
升级完mysql-server之后
升级后的mysql版本

修改配置文件

1
2
3
4
5
6
7
8
9
[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'

修改完这些配置文件后,之后创建的库、表就是utf8mb4格式了,但是之前的收据就需要手动修改一下了

1
2
3
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;

重启mysql,查看字符集
/etc/init.d/mysqld restart

使用utf8mb4,需注意
1.mysql-server 版本需要高于5.5.3
2.mysql-connector 版本需要高于5.1.3版本(建议升级到最新版,目前是5.1.39)

查看字符集
参考:
http://www.wangyuxiong.com/blog/mysql-dbzi-fu-ji-sheng-ji-zhi-utf8mb4,24/
https://segmentfault.com/a/1190000000616820