解决mysql保存emoji表情报错

本人使用的是mysql数据库,引擎默认使用的是InnoDB(其实跟引擎没关系).字符集为utf8

当保存emjoy表情的时候就报错了,很难受.为什么会这样呢

百度一下网上的资料,最后

总结

早期的mysql版本将utf8编码设置为1~3个字节,而emoji表情是4个字节,存到utf8编码的字段里当然报异常了.

为此mysql后续增加utf8mb4编码.完美的兼容了emoji表情的保存

Linux设置mysql字符编码

本人的linux系统为centos7.4.过程如下

1. 进入文件编辑 vim /etc/my.cnf

2.在[mysqld]添加

character-set-server=utf8mb4

3.重启服务service mysql restart

4.mysql -u root -p 进入mysql

5.查看mysql字符集

mysql>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

OK,完美解决

参考文献:https://blog.csdn.net/u013516897/article/details/78829832

下面这么设置更为彻底

[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略好, 因为这个存储二进制数据

转载于:https://my.oschina.net/u/2283248/blog/1827160

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值