表情符号字符()在MySQL 5.6版中不能与utf8mb4_bin一起使用

时间:2017-10-09 08:39:57

标签: php mysql utf-8 utf utf8mb4

我正在尝试将表情符号保存到数据库记录中,但每次都没有正确保存。 我已经提到了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


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

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

1 个答案:

答案 0 :(得分:6)

连接需要为MySQL指定utf8mb4DOMDocument中的内容是什么?

是十六进制F09F9880,应该在CHARACTER SET utf8mb4列中进行任何utf8mb4_*归类。

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

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

相关问题