gpt4 book ai didi

mysql - Laravel数据库从旧数据库迁移UTF-8编码问题

转载 作者:行者123 更新时间:2023-11-29 16:20:25 24 4
gpt4 key购买 nike

声明者:是的,我已经在 Stackoverflow 上进行了搜索,但没有找到此案例的答案。

我正在从一个论坛迁移数据,该论坛的 MySQL 数据库中有一些遗留内容。问题之一是表情符号的存储。

捐助者数据库:

-- Server: 5.5.41-MariaDB
CREATE TABLE `forumtopicresponse` (
`id` int(10) UNSIGNED NOT NULL,
`topicid` int(10) UNSIGNED NOT NULL DEFAULT '0',
`userid` int(10) UNSIGNED NOT NULL DEFAULT '0',
`message` text NOT NULL,
`created` int(10) UNSIGNED NOT NULL DEFAULT '0',
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

在消息栏中我收到如下消息:Success!ðŸ‘👠,显示为“成功!👍👍”

Laravel 目标数据库:

-- Server: MySQL 5.7.x
CREATE TABLE `answers` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`topic_id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`body` text CHARACTER SET utf8mb4,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
...keys & indexes
) ENGINE=InnoDB AUTO_INCREMENT=1254419 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

在 HTML 中,文档有 <meta charset="utf-8">为了显示该字段,我正在使用

{!! nl2br(e($answer->body)) !!}

这样它就显示为 Success!ðŸ‘ðŸ‘而不是表情符号。

问题

如何将这些 CLEAN 和 UTF-8 有效数据迁移到我的新数据库中?我想我需要一些 utf 编码,但不知道是哪个。

更新!解决方案

已经修好了。唯一的解决方案是更改捐赠者数据库中的表。

ALTER TABLE forumtopicresponse CHANGE message message LONGTEXT CHARACTER SET latin1;
ALTER TABLE forumtopicresponse CHANGE message message LONGBLOB;

不要再将 LONGBLOB 更改为 LONGTEXT:这样我就丢失了数据。

当我将 LONGBLOB 数据迁移到 Laravel 目标数据库时,所有内容都已正确迁移:所有特殊字符和表情符号均已修复并且采用 UTF-8 格式。

最佳答案

表情符号👍是十六进制F09F918D。也就是说,它是一个4字节的字符串。

MySQL 的 CHARACTER SET = utf8 不处理 4 字节的 UTF-8 字符串,只处理 3 字节的字符串,从而排除了许多 Emoji 和一些中文。

当解释为latin1时,这些十六进制数字是ðŸ‘(加上第四个但不可打印的字符)。像这样显示乱码的行为被称为“Mojibake”。

所以,你有两个问题:

  • 需要将存储更改为 utf8mb4,以便可以存储表情符号。
  • 需要向 MySQL 宣告您的客户端使用的是 UTF-8,而不是 latin1。

请参阅 Trouble with UTF-8 characters; what I see is not what I stored 中的“最佳实践”

另请参阅UTF-8 all the way through

这是我的 fixes 列表,但是您必须首先正确识别您的情况。应用错误的修复会使事情变得更糟。

可能存在第三个错误——将数据从 5.5 移动到 5.7。请提供这些详细信息。

关于mysql - Laravel数据库从旧数据库迁移UTF-8编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54551439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com