2022年2月11日星期五

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

原文链接:https://www.chenweiliang.com/cwl-26592.html


广告










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

检查是否如下 ▼


从 MySQL 5.5.3 版本开始,数据库可以支持 4 字节的 utf8mb4 字符集,而一个字符最多可以有 4 个字节,所以可以支持更多的字符集,也就可以存储 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/ ) 分享的《》,对您有帮助。



欢迎分享本文链接:



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





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











 

 














欢迎转载《Emoji怎么存入MySQL?录入数据库Emoji表情问号字符问题

欢迎分享本文链接:https://www.chenweiliang.com/cwl-26592.html


网站地址:https://www.chenweiliang.com/



欲获取更多资讯内幕和秘技,欢迎进入Telegram频道:https://www.chenweiliang.com/go/tgchannel

没有评论:

发表评论