Мусорные данные в базе данных экспорта-импорта с использованием той же таблицы сортировки - PullRequest
0 голосов
/ 08 ноября 2019

Я использую Adminer для выгрузки базы данных и перемещения ее в новую базу данных. Обе базы данных находятся на одном сервере MySQL 5.5.5-10.1.41-MariaDB-0 + deb9u1. Обе базы данных используют параметры сортировки latin1_swedish_ci, как показано в Adminer.

Эти строки случайных символов появляются в таблицах базы данных, то есть bs00fgcb для того, что должно быть именем, hgaibbsf@example.org для того, что должно быть электронной почтой,и т. д.

Эти данные, конечно же, выглядят нормальными в интерфейсе приложения перед экспортом базы данных, но отображаются как мусор выше после импорта в другую базу данных и просмотра другим приложением.

Эти данные мусора появляются в дампе базы данных при просмотре в текстовом редакторе с использованием UTF-8, прежде чем я импортирую в новую базу данных. Другие данные, по-видимому, не повреждены.

Если я импортирую дамп базы данных перед его просмотром в текстовом редакторе, я получу те же данные мусора. Я пытался экспортировать и импортировать базу данных несколько раз.

Это заголовок файла экспорта:

-- MySQL dump 10.15  Distrib 10.0.36-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: example_sql
-- ------------------------------------------------------
-- Server version   10.0.36-MariaDB-0ubuntu0.16.04.1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

Похоже, что для вызова таблицы для каждого набора таблиц при импорте вызывается:

DROP TABLE IF EXISTS `example_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;

Почему я получаю эти данные гаража при экспорте или импорте? Где это происходит?

Я не хочу пытаться преобразовать параметры сортировки таблиц базы данных, используемые активным приложением, перед экспортом.

Я использовал select convert(binary convert(field_name using latin1) using utf8) from table_name в одной импортированной таблице, ноэто ничего не сделало.

1 Ответ

0 голосов
/ 10 ноября 2019

В конце концов, я не уверен, в чем проблема: либо администратор при экспорте и / или импорте;или параметры сортировки таблиц latin1_swedish_ci, хотя обе базы данных использовали один и тот же порядок сортировки;или даже конфликт между очень старой версией linux и более новыми версиями MySQL на сервере.

Но я экспортировал с помощью mysqldump через SSH при форсировании UTF, а затем изменил сортировку таблицы на utf8_unicode_ci в базе данных импорта, и этосработало.

Итак, экспортируйте напрямую из MySQL, используя mysqldump при форсировании utf8:

mysqldump -u root -p --default-character-set=utf8 my_database > backup.sql

Или используйте gzip, если необходимо:

mysqldump -u root -p --default-character-set=utf8 my_database | gzip > backup.gz

Затем я установил сопоставление таблицы в базе данных на utf8_unicode_ci и импортировал базу данных с помощью Adminer.

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