我们有一个项目,将 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/