如果Emoji表情以utf8编码存入MySQL数据库或MariaDB,则无法显示。
为何录入数据库Emoji表情变成问号字符?
因为Emoji表情是4字节字符,utf8字符集只支持1 -3 字节的字符,因此造成Emoji表情无法写入数据库。
如何解决录入数据库Emoji表情变成问号字符?
有2个解决办法:
- 手动输入文本,将四字节字符替换为自定义字符。
- 修改 MySQL 数据库字符集,将数据库字符集从 utf8 改为 utf8mb4,支持 1-4 字节字符。
其实第一种方法工作量太大,不可取。
建议使用第2种解决方案,修改MySQL数据库字符集。
从 MySQL 5.5.3 版本开始,数据库可以支持 4 字节的 utf8mb4 字符集,而一个字符最多可以有 4 个字节,所以可以支持更多的字符集,也就可以存储 Emoji 表情。
由于在phpMyAdmin新创建的数据库中新创建的表,默认字符编码为:Latin1
MySQL Emoji字符问题解决方案
第 1 步:修改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 步:重启MySQL数据库
service mysqld restart
第 3 步:再次查看字符集,在SQL命令行中输入 ▼
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_database';
检查是否如下 ▼
输入以下SQL命令 ▼
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
检查是否如下 ▼
+--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+--------------------+
在phpMyAdmin创建新数据库后,必须查看数据库编码 ▼
SHOW CREATE DATABASE db_name;
假如数据库编码不是utf8mb4
,必须修改数据库字符集为utf8mb4
。
如何修改数据库字符集为utf8mb4?
第 1 步:在phpMyAdmin点击当前数据库名称,然后点击SQL。
第 2 步:输入以下命令修改数据库字符集为utf8mb4
▼
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8mb4
第 3 步:重启MySQL数据库
service mysqld restart
以下是一些SQL命令实例:
把表默认的字符集和所有字符列,改为新的字符集 ▼
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
若只修改表的默认字符集 ▼
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
修改字段的字符集 ▼
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name
查看表编码 ▼
SHOW CREATE TABLE tbl_name;
查看字段编码 ▼
SHOW FULL COLUMNS FROM tbl_name;
查看当前数据库编码 ▼
SHOW VARIABLES LIKE 'character_set_%';