本人使用的是mysql数据库,引擎默认使用的是InnoDB(其实跟引擎不要紧).字符集为utf8mysql
当保存emjoy表情的时候就报错了,很难受.为何会这样呢linux
百度一下网上的资料,最后sql
总结
早期的mysql版本将utf8编码设置为1~3个字节,而emoji表情是4个字节,存到utf8编码的字段里固然报异常了.数据库
为此mysql后续增长utf8mb4编码.完美的兼容了emoji表情的保存vim
Linux设置mysql字符编码
本人的linux系统为centos7.4.过程以下centos
1. 进入文件编辑 vim /etc/my.cnf性能
2.在[mysqld]添加编码
character-set-server=utf8mb4centos7
3.重启服务service mysql restartspa
4.mysql -u root -p 进入mysql
5.查看mysql字符集
mysql>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
OK,完美解决
参考文献:http://www.javashuo.com/article/p-qpoeisjr-bx.html
下面这么设置更为完全
[client]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = false
character-set-server = utf8mb4
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set = utf8mb4
MySQL混合utf8 utf8mb4是否比纯utf8mb4更具优点?
其实都差很少.utf8mb4其实就是标准的utf8.他能够实现存储4个字节的emjoy表情而utf8不行
另外须要注意的一点就是utf8mb4的表字段最好不要用char固定字符.由于N个char字符所占用的空间是N*4字节.建议改用可变长度的varchar进行存储.效率方面稍好(增长额外的1-2字节记录其字段大小)
而纯英文字符的字段(例如密码等).能够用varbinary(可变长度binary)和binary列(适用于固定长度的英文字符, 例如密码哈希)类型.性能比varchar略好, 由于这个存储二进制数据