Дамп и загрузка MySQL с правильной кодировкой / сопоставлением - PullRequest
0 голосов
/ 10 октября 2019

У меня есть скрипт сборки Bamboo, который отправляет MySQL Admin и выполняет следующие действия:

    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysqladmin" -f -h server -u user -p pwd drop db1
    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysqladmin" -f -h server -u user -p pwd create db1
    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysqldump" db2 -h server -r c:\temp\db2.sql -n --no-data -u user -p pwd
    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysql" -h server -D db1 -u user -p pw < c:\temp\db2.sql

Код, по сути, удаляет БД, воссоздает его и загружает из БД по умолчанию (db2)

Проблема в том, что db2 - это следующая кодировка / сопоставление

Charset: latin1, Collation: latin1_bin

Принимая во внимание, что скопированная БД:

Charset: utf8mb4, Collation: utf8mb4_0900_...

Это создает проблему, когда наш массовый загрузчик MySQL запускается и сталкивается с определенными символами в данных, такими как:

    MySql.Data.MySqlClient.MySqlException: Invalid utf8mb4 character string: 'TO CHARGE VOLAC '

Я провел некоторое времяна этом сайте и в Google, но ничего из того, что я пробовал, не сработало.

Может кто-нибудь указать мне правильное направление, пожалуйста?

1 Ответ

1 голос
/ 10 октября 2019

Чтобы ответить на этот вопрос, я интерпретирую "db по умолчанию" как db, которую вы копируете из , и как "copyied db" как новую БД, в которую вы пытаетесь скопировать.

Если вы создаете новую базу данных с помощью команды SQL вместо mysqladmin, вы можете установить набор символов новой базы данных:

CREATE DATABASE db1 CHARACTER SET latin1 COLLATE latin1_bin;

Для выполнения из командной строки:

echo 'CREATE DATABASE db1 CHARACTER SET latin1 COLLATE latin1_bin;' | mysql -h server -u user -ppw

(Кроме того, -p с пробелом после него, как в вашем примере, не будет правильно интерпретировать пароль, вам необходимо присоединить его к -p).

...