本问题已经有最佳答案,请猛点这里访问。
我试图将表情符号保存到数据库记录中,但是每次保存不正确时。
我已经提到了如何在我的SQL数据库中存储表情符号字符,但仍然无法正常工作。
根据上述问题的解决方案,我尝试将字符集从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 = ''
+ $strWithEmoji;
$this->save($fullContent); // Function for saving into database
我不知道确切要存储多少字节,但我只想保存
此表情符号字符" ??"并将其存储为4个问号(????)。
我从下面的链接尝试了所有解决方案,但没有为我工作:
如何在我的SQL数据库中存储表情符号字符
UTF-8贯穿始终
最终的表情符号编码方案
@利亚姆我尝试了已被要求的所有解决方案,但无法正常工作
您已经在2天前的原始问题中添加了几乎所有内容。请不要多次问相同的问题。它不起作用不是问题。
@Liam问题已删除
删除重复项将无济于事。实际上,这使情况看起来更糟...有一个理由将该问题(由主持人)标记为与其他问题重复。可以投票结束此问题的BTW人员即使您删除了该问题也可以看到该问题。
@Liam Ive指定了上一个问题中未实现的所有内容,但并没有帮助我。这是我要解释的另一种情况,然后请指定如何重复。
请提供尝试存储的确切字节,以及实际存储的确切字节。还为问题中的表提供实际的SHOW CREATE TABLE。另外,从您的问题中删除所有frameworks / 3rd party库,并提供一个php + pdo / mysqli only代码来演示问题。
@zerkms更新了问题,我没有确切的字节,我试图仅保存Ive在问题标题中提到的单个表情符号字符。谢谢。
还删除laravel或您拥有的所有东西,仅运行php + pdo / mysqli。这样,您将隔离问题。然后,确保仅php + pdo的文件采用utf8编码,并且pdo连接也为utf8。
@zerkms我不认为问题出在PHP代码上,因为该代码在localhost机器上运行正常,但是仅对于实时服务器,该问题正在发生。
@KRY如果您不想自己解决问题,您正在寻求什么样的帮助?"我不认为" ---很好。那你有什么建议?
@zerkms该代码在我的本地计算机上运行,??但在实时服务器上却没有运行,因此很明显是MySQL的问题,只是我没有捕捉到MySQL存在什么问题,并且Ive已经更新了相关的PHP代码。
@KRY"很清楚它的MySQL问题" ---好,如果它对您很清楚-您可能应该知道答案。否则,我不确定该声明基于什么。如果您不愿意适当地解决问题-我不确定我准备玩猜谜游戏。祝您好运:-)"并且Ive已经更新了相关的PHP代码。" - - 你还没有。隔离意味着您没有任何框架或其他第三方依赖性,只有php + pdo(我可以按原样在本地计算机上自行运行),没有别的。
@zerkms为什么不尝试其他问题?
@KRY好,我想帮助您找出问题,以及在问题仍然存在的情况下(如果问题仍然存在)-我想在本地重现此问题以帮助您确定问题。但是您决定不需要我的帮助。好吧,经过8个小时,您取得了什么进展?您仍然认为您选择的策略有效吗?
连接需要为MySQL指定utf8mb4。 DOMDocument的内容是什么?
??是十六进制F09F9880,它应在任何utf8mb4_*归类的CHARACTER SET utf8mb4列中使用。
这是另一个链接:UTF-8字符有问题; 我看到的不是我存储的
如果所有其他方法均失败,请在建立连接后从PHP执行SET NAMES utf8mb4。