5

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

 2 years ago
source link: https://www.chenweiliang.com/cwl-26592.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

2022年2月11日

如果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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK