如果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 表情。
- MySQL 5.5.3以后,基本可以无缝升级到utf8mb4字符集。
- 同时,utf8mb4 兼容 utf8 字符集。
- utf8字符的编码、位置和存储在utf8mb4。
- 和utf8字符集相同,不会对现有数据造成损坏。
由于在phpMyAdmin新创建的数据库中新创建的表,默认字符编码为:Latin1
- 这种编码不能插入中文和Emoji表情;
- 需要把数据库字符集和表的字符集编码改为utf8mb4;
- 然后,重启MySQL,就可以插入中文和Emoji表情了。
MySQL Emoji字符问题解决方案
第 1 步:修改MySQL配置文件my.cnf
- (Windows服务器为my.ini,Linux服务器为my.cnf)
- my.cnf文件,一般在
/etc/mysql/my.cnf
位置。 - CWP控制面板的my.cnf文件,是在
/etc/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;
- 如:
SHOW CREATE DATABASE test;
假如数据库编码不是utf8mb4
,必须修改数据库字符集为utf8mb4
。
如何修改数据库字符集为utf8mb4?
第 1 步:在phpMyAdmin点击当前数据库名称,然后点击SQL。
第 2 步:输入以下命令修改数据库字符集为utf8mb4
▼
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8mb4
- 如:
ALTER DATABASE test 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 logtest CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
若只修改表的默认字符集 ▼
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
- 如:
ALTER TABLE logtest DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
修改字段的字符集 ▼
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name
- 如:
ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
查看表编码 ▼
SHOW CREATE TABLE tbl_name;
查看字段编码 ▼
SHOW FULL COLUMNS FROM tbl_name;
查看当前数据库编码 ▼
SHOW VARIABLES LIKE 'character_set_%';
- mysql-connector-java驱动包在5.1.13+才支持utf8mb4
希望陈沩亮博客( https://www.chenweiliang.com/ ) 分享的《Emoji怎么存入MySQL?录入数据库Emoji表情问号字符问题》,对您有帮助。
欢迎分享本文链接:https://www.chenweiliang.com/cwl-26592.html
喜欢就分享和按赞!您的分享和按赞,是我们持续的动力!