在MySQL数据库中,表情符号显示为?
在MySQL数据库中,表情符号显示为?
在我的数据库中,Emoji以问号的形式存储(在使用phpMyAdmin可视化时),但是当我使用简单的请求(来自php)检索它们时,我得到了真实的值。
数据库中的行(使用phpMyAdmin):
[图片链接]
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%';
我得到了这个结果:
[图片链接]
我的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>变量
[图片链接]
会话值(utf8)与预期值(utf8mb4)不同。
在MySQL数据库中,出现(emoji display as ? in MySQL database)这个问题的原因是phpMyAdmin的一个bug(在版本4.6.4中已经修复)。当使用phpMyAdmin连接数据库时,会话变量如character_set_client和character_set_results没有使用默认值进行初始化。可以参考这个commit来了解详情。
如果你遇到了这个bug,并且想要导入/导出数据库,请不要使用phpMyAdmin。作为解决方法,可以使用这个链接进行导入操作,使用这个链接的文档进行导出操作。
这个bug的解决方法是使用命令行进行导入/导出操作,而不是依赖phpMyAdmin。具体的解决步骤可以参考上述链接提供的文档。
总结起来,要解决(emoji display as ? in MySQL database)这个问题,可以通过使用命令行工具来代替phpMyAdmin进行导入和导出操作。这样可以避免phpMyAdmin的bug导致的字符集问题。
emoji在MySQL数据库中显示为?的问题通常是由于字符集设置不正确导致的。为了解决这个问题,需要将character_set_client、character_set_connection和character_set_results都设置为utf8mb4。其他的设置不重要。
在一些情况下,如果数据在插入时丢失,可能会导致emoji显示为单个问号。如果一个emoji显示为四个问号,那可能是另外一个问题。
有人尝试通过编辑my.cnf文件(通常位于/etc/my.cnf)来设置character_set_client和character_set_results为utf8mb4,但是没有效果。
还有人注意到,尽管在my.cnf文件中已经将character_set_client和character_set_results设置为utf8mb4,但会话值仍然不同。这可能是因为在连接时,客户端使用的字符集没有正确设置。不同的客户端在设置字符集方面有不同的方法,可以在这里找到一些方法。
总结起来,要解决emoji在MySQL数据库中显示为?的问题,需要确保将character_set_client、character_set_connection和character_set_results都设置为utf8mb4,并正确设置客户端连接时使用的字符集。