Proclaimer: ДА, я выполнил поиск в Stackoverflow, и НЕТ, он не смог найти ответ для этого случая.
Я переношу данные с форума, который имеет какое-то наследие в своей базе данных MySQL.,Одной из проблем является хранение Emoji.
База данных доноров:
-- 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!ðŸ‘ðŸ‘
, который отображается как «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.