Emoji怎么存入MySQL?录入数据库Emoji表情问号字符问题

如果Emoji表情以utf8编码存入MySQL数据库或MariaDB,则无法显示。

为何录入数据库Emoji表情变成问号字符?

因为Emoji表情是4字节字符,utf8字符集只支持1 -3 字节的字符,因此造成Emoji表情无法写入数据库。

如何解决录入数据库Emoji表情变成问号字符?

有2个解决办法:

  1. 手动输入文本,将四字节字符替换为自定义字符。
  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';

检查是否如下 ▼

Emoji怎么存入MySQL?录入数据库Emoji表情问号字符问题

输入以下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

欢迎加入陈沩亮博客的 Telegram 频道,获取最新更新!

喜欢就分享和按赞!
您的分享和按赞,是我们持续的动力!