表情符号显示为?在MySQL数据库中

时间:2016-11-02 22:32:06

标签: php mysql character-encoding emoji

表情符号存储为?在我的数据库中(当我使用phpMyAdmin将它们可视化时),但是当我使用简单的请求(来自php)检索它们时,我得到了真正的价值。

数据库上的

行(使用phpMyAdmin) enter image description here

来自php的请求

$query = "SELECT id,com
          FROM coms_table
          WHERE id = 627";

结果

id     com  
627    \ud83d\ude0e

使用此命令

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
我得到了这个:
   enter image description here

my.cnf文件:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
default-storage-engine=MyISAM
innodb_file_per_table=1
performance-schema=0
innodb_buffer_pool_size=134217728
max_allowed_packet=268435456
open_files_limit=10000
local-infile=0
character-set-client-handshake = TRUE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

总结一下,只有当我使用phpMyAdmin连接到数据库时才会出现此问题。最糟糕的是,当我尝试使用phpMyAdmin导入数据库时​​,所有问号都被真正的“?”取代,数据肯定会丢失。

编辑1
&phpMyAdmin的GT;变量 enter image description here 会话值(utf8)与预期值(utf8mb4)不同

2 个答案:

答案 0 :(得分:0)

你需要character_set_client, _connection, and _results为utf8mb4。其余的并不重要。

单个问号可能意味着数据在插入时丢失了。 (1个表情符号的4个问号意味着不同的问题。)

答案 1 :(得分:0)

它似乎是一个phpMyAdmin错误(在4.6.4版本中更正)。
当您使用phpMyAdmin连接到您的数据库时,会话的变量(如character_set_clientcharacter_set_results)不会使用默认值进行初始化。 请参阅此commit

如果您有此错误并希望导入/导出您的数据库,请不要使用phpMyAdmin。 要解决此问题,请使用this link执行导入操作,并使用this link处的文档执行导出操作。