База данных GCP MySQL Cloud SQL неправильно экспортирует многобайтовые символы UTF-8 - PullRequest
0 голосов
/ 25 сентября 2019

Когда я создаю резервную копию моей базы данных MySQL Cloud SQL, она неправильно экспортирует содержащиеся в ней многобайтовые символы UTF-8.

Мне кажется, это ошибка.Но может быть, я что-то упустил.Я надеюсь, что кто-нибудь может мне помочь!

Шаги для воспроизведения:

  1. Создайте новую базу данных MySQL Cloud SQL.Использование версии 5.7.Обязательно установите флаг character_set_server на utf8mb4.

  2. Создать новую базу данных с character_set до utf8mb4 и collation до utf8mb4_unicode_ci.

  3. Заполнить базу данных:

    SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
    CREATE TABLE `slug` (
     `slug` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    INSERT INTO demo.slug VALUES ('???');
    
  4. Я подтвердил, что могу вернуть эти значения должным образом, используя следующее:

    SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
    SELECT * FROM demo.slug;
    
  5. Используйте встроенный механизм экспортаКонсоль предоставляет.

    enter image description here

  6. При загрузке результирующего файла SQL соответствующий оператор INSERT будет выглядеть следующим образом.И содержат вопросительные знаки вместо допустимых символов UTF-8.

    INSERT INTO `slug` VALUES ('???');
    

    Обратите внимание, что я также получаю это точное значение, когда пропускаю часть SET NAMES в шаге 4.

1 Ответ

0 голосов
/ 26 сентября 2019

Я попытался сделать это через консоль, как вы, и я дошел до той же проблемы.Обходное решение, которое сработало для меня:> + Добавить сеть

С помощью этой команды вы можете получить общедоступный IP-адрес dig +short myip.opendns.com @resolver1.opendns.com

2) Создать файл .sql, выполнив эту команду:mysqldump --databases [YOUR_DB_NAME] -h [YOUR_INSTANCE_PUBLIC_IP] -u [YOUR_USER] -p --default-character-set=utf8mb4 > [FILE_NAME].sql

3) Переместите файл в корзину, выполнив следующую команду: gsutil mv [FILE_NAME].sql gs://[YOUR_BUCKET_NAME]/

4) Затем вы импортируете файлчерез консоль, выбрав нужную базу данных.

Я пробовал это, и оно работает для меня.

...