SQL Server - Ошибка миграции MySQL: неверное строковое значение: '\ xF4 \ x80 \ x82 \ x83 ...' - PullRequest
0 голосов
/ 08 мая 2018

Я новичок в MySQL и переношу клиентскую базу данных MS SQL Server 2008 R2 на Windows Server 2008 R2 на MySql Ver 8.0.11 для Win64 на x86_64 (MySQL Community Server - GPL) на Windows 2016 Server с использованием MySql Workbench 8.0 инструмент переноса, копирующий данные с помощью опции Online copy of table table to target RDBMS.

Я получаю предупреждения о всех столбцах SQL Server varchar и ntext о том, что «Collation SQL_Latin1_General_CP1_CI_AS перенесен в utf8_general_ci», но это только проблема с таблицей с двумя столбцами ntext. Эта таблица не может перенести данные с ошибкой «неверное строковое значение:« \ xF4 \ x80 \ x82 \ x83 ... ».

Хотя я немного запутался в наборах символов и сопоставлениях, мое исследование Интернета указывает на то, что проблема в том, что в MySQL utf8 допускает только 3 байта, и мне нужно переместить эти данные в utf8mb4, который допускает 4 байта. Я изменил файл my.ini следующим образом:

[client]

default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci

Это приводит к тому, что следующие значения переменных для character_set_ * являются (в основном) utf8mb4, за исключением символьной_системы, которая остается utf8, и character_set_filesystem двоичной. Переменные параметров сортировки: utf8mb4_unicode_ci: Набор символов и параметры сортировки

Кажется, инструмент миграции игнорирует это? Кто-нибудь знает, как я могу переместить эти данные без изменений, желательно с помощью простого в использовании инструмента миграции? (Имея в виду, что моя неопытность в этой среде означает, что мне нужна довольно явная помощь). Спасибо!

1 Ответ

0 голосов
/ 29 января 2019

Какие инструменты миграции вы используете?

В последнее время у меня такая же проблема, но с AWS DMS. Это происходит от персонажа эмодзи. Если у вас такая же ситуация, как у меня, вы можете использовать «Дополнительные атрибуты подключения» для замены символа Emoji в исходной конечной точке.

Пример: parallelLoadThreads = 1; ReplaceChars = F09F988A, 3F, F09F9982,3F, F09F8CBB, 3F, F09FA681,3F, F09F918C, 3F, F09F9882E298,3F

Для другого способа вы можете удалить символ эмодзи перед сохранением в базу данных. Это не дружит с инструментами миграции баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...