• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

关于MySql插入表情Emoji报错问题解决

Data: 2018-11-25 23:49:48Form: JournalClick: 14

关于使用MySQL存储表情的问题与解决

问题描述

1、我们在使用MySQL存储emoji时,如果会报下面的错误:
image.png

原因分析

MySQL数据库默认是UTF-8编码格式,普通的字符串占位3个字节而表情需要占位4字节,此时UTF-8就不够用了,这时候需要采用utf8mb4字符集才能解决,其实现在开发中UTF-8也开始慢慢不建议使用了,可以参考一下下面这文章;
https://mp.weixin.qq.com/s/S0aJ4SKP8IXRKULukgRXEQ

问题解决

所以我们现在目的就是把MySQL的编码格式修改为utf8mb4(mysql5.3.3版本以上)就行了;
可以使用sql直接修改,下面分别修改数据库字符集、修改表字符集、修改表字段字符集;

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE     utf8mb4_general_ci;

这边以修改表字段字符集为例子解决该问题,下面是test表结构
image.png sql语句:

ALTER TABLE test CHANGE name name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE   utf8mb4_general_ci

插入问题解决:

image.png

补充

在实际开发中,我们应该提前约定好字符集,而不是后面随意更改,随意更改可能会影响到原有数据显示问题;可以更改mysql默认配置,将其设为utf8mb4具体操作如下:

1、修改mysql配置文件(windows:my.ini;linux:my.cnf)

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
#character-set-server=utf8 这行注释掉
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

2、重启mysql

service mysql restart1

3、查看是否修改成功

SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';

下图红框内为utf8mb4信息即为修改成功

image.png

Name:
<提交>