【问题标题】:Emoji character (????) is not working with utf8mb4_bin in MySQL version 5.6 [duplicate]表情符号字符(????)在 MySQL 5.6 版中不适用于 utf8mb4_bin [重复]
【发布时间】:2018-03-20 09:47:46
【问题描述】:

我正在尝试将表情符号保存到数据库记录中,但每次都无法正确保存。 我已经提到了这个How to store Emoji Character in My SQL Database,但仍然无法正常工作。
根据上述问题的解决方案,我尝试将字符集从 utf8 更改为 utf8mb4 并从 utf8mb4_bin 进行排序。

我尝试了一切,比如重置为默认值,然后在数据库表中更改它。我尝试了 utf8mb4_unicode_ci、utf8_unicode_ci 和 utf8mb4_bin,但它不起作用。

我正在使用 MySQL 5.6 版本。我正在使用以下查询更改排序规则

alter table `users` convert to character set utf8mb4 collate utf8mb4_bin;

上面的代码工作正常,它改变了数据库中的 UTF 类型。但是表情符号没有正确保存它保存为问号(????)

下面是我的数据库表结构示例:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'System generated id used for uniqueness',
  `introduction` longtext COLLATE utf8mb4_bin,
  `other_details` longtext COLLATE utf8mb4_bin,    
   PRIMARY KEY (`id`),
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=41213 ;


使用以下 PHP 代码保存表情符号:

$dom = new DOMDocument('1.0', 'UTF-8');
$strWithEmoji = "????";
$fullContent = '<meta http-equiv="content-type" content="text/html; charset=utf-8">'
               + $strWithEmoji;
$this->save($fullContent); // Function for saving into database


我不知道确切存储了多少字节,但我只想保存 这个表情符号“???”并将其存储为 4 个问号 (????)。

我尝试了以下链接中的所有解决方案,但对我不起作用:
How to store Emoji Character in My SQL Database
UTF-8 all the way through
The ultimate emoji encoding scheme

【问题讨论】:

  • 您在 2 天前的原始问题中几乎没有添加任何内容。请不要多次问同一个问题。它不工作不是问题。
  • 请提供尝试存储的确切字节数,以及实际存储的确切字节数。还要为问题中的表格提供实际的SHOW CREATE TABLE。此外,从您的问题中删除所有框架/第 3 方库,并提供仅用于演示问题的 php+pdo/mysqli 代码。
  • 同时删除 laravel 或任何你有的东西,只运行 php+pdo/mysqli。这样,您将隔离问题。然后确保你的只有php+pdo的文件是utf8编码的,你的pdo连接也是utf8的。
  • @KRY 如果您不想自己孤立问题,您正在寻求什么样的帮助? “我不认为”——很好。那你有什么建议呢?
  • @KRY “很明显这是 MySQL 的问题”——很好,如果你很清楚——你可能应该知道答案。否则,我不确定该声明的依据是什么。如果您不愿意正确隔离问题 - 我不确定我是否准备好玩猜谜游戏。祝你好运:-) “我已经更新了相关的 PHP 代码。” - - 你还没有。隔离意味着您没有任何框架或其他 3rd 方依赖项,只有 php+pdo(我可以自己在本地机器上按原样运行),没有别的。

标签: php mysql utf-8 utf utf8mb4


【解决方案1】:

连接需要指定utf8mb4到MySQL。 DOMDocument 中隐藏着什么?

? 是十六进制 F09F9880,它应该在带有任何 utf8mb4_* 排序规则的 CHARACTER SET utf8mb4 列中工作。

这是另一个链接:Trouble with UTF-8 characters; what I see is not what I stored

如果所有其他方法都失败,请在建立连接后从 PHP 中执行 SET NAMES utf8mb4

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2016-04-29
    • 2017-06-30
    • 2018-03-03
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多