使用 UTF8MB4 时,MySQL 仅在文本字段中存储一些表情符号

标签 mysql utf-8

我们有一个项目,将 Facebook 和 Twitter 帖子存储在 Mysql 数据库中,因为首先几乎所有表情符号都存储为 ?。我们已经对数据库服务器进行了一些配置更改,从那时起,我们开始看到更多的表情符号保存并正确显示,但是一些表情符号仍然显示为?,遗憾的是我不确定它们是哪些是。我知道其中一个是篮球。

当我在 MySQL 上执行以下命令时;

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%'
                  OR Variable_name LIKE 'collation%';

我看到以下设置;

character_set_client     = utf8
character_set_connection = utf8
character_set_database   = utf8mb4
character_set_filesystem = binary
character_set_results    = utf8
character_set_server     = utf8mb4
character_set_system     = utf8
collation_connection     = utf8_general_ci
collation_database       = utf8mb4_unicode_ci
collation_server         = utf8mb4_unicode_ci

我们的数据库服务器由 Rackspace 托管,我们要求他们设置以下配置;

[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'

我使用许多客户端、PHP、Java 和 MySQL Workbench 测试了数据库的输出。

我现在不明白为什么有些表情符号没有保存,并且我已经遵循了在网络上找到的尽可能多的建议。

最佳答案

character_set_client/connection/results = utf8 -- 这三个由 SET NAMES 更改。您列出的内容似乎是在执行 SET NAMES 之前。

如果您以root身份连接,则不会执行init-connect;也许这就是你看不到它的原因。

为所有应用程序工作建立一个非 super 用户;这样 init-connect 将被执行。

关于使用 UTF8MB4 时,MySQL 仅在文本字段中存储一些表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162109/

相关文章:

powershell - 为什么 Powershell 文件串联会将 UTF8 转换为 UTF16?

python - UnicodeDecodeError : ('utf-8' codec) while reading a csv file

c# - 使用 SQL Server、MySQL 数据库创建唯一约束

mysql - 显示表和 MYSQL_NUM_ROWS

php - Foreach 重复值

mysql - 自动打印订单

mysql - 在 MySQL 中搜索表情符号

bash - xxd:如何简单地恢复而不添加 "00000000:"?

xml - 无法支持 ColdFusion 生成的 XML 文件中的非 UTF-8 字符

MySQL 的操作顺序?