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 表情。

由于在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_%';

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注