Сравнение структуры таблиц без учета регистрозависимости.

Kitap

Создатель
Регистрация
1 Июн 2018
Сообщения
23
Реакции
70
  • Автор темы
  • Заблокирован
  • #1
Вредоносная программа или шаловливые руки бывшего админа сайта, или несовместимые компоненты попортили таблицы магазина, то есть имеется несоответствие структур таблиц MySQL.

Пытаюсь сравнить таблицы программой "Navicat Premium".
Скрин, показывает на то что сравнение идет через DDL, очень буквально, даже с учетом регистра комментариев к полю таблицы, что дает на выходе довольно сложный миграционный скрипт, с мягко выражаясь, с не совсем нужными данными. По идее наплевать на комменты к полям таблицы, а у Navicat нету опции на отключение такого сравнения. Кто чем пользуется для создания миграционных скриптов при работе с репозитариями, синхронизацией и т.д. ?

Ну и конечно, из того что можно достать нуленое или бесплатное.
 

Вложения

  • ctructured.png
    ctructured.png
    102,9 KB · Просмотры: 12

Black Hat

Постоялец
Регистрация
15 Май 2015
Сообщения
167
Реакции
111
А вы сделайте
Код:
SELECT CREATE_TIME, UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'your_schema'
AND table_name = 'your_table'
может что-то интересное поймете.
Думаю, какой-то компонент ставился/обновлялся, и при этом сделал "ALTER TABLE ... MODIFY ... " и поменял DDL.
Есть другие симптомы?
PS
Я схемы сравниваю так на баше:
Код:
mysqldump --routines --events --triggers --no-data test > schema-test.sql
mysqldump --routines --events --triggers --no-data run > schema-run.sql
diff schema-test.sql schema-run.sql
 
Последнее редактирование:

tolik1313

Писатель
Регистрация
12 Окт 2018
Сообщения
6
Реакции
1
Выгружаете дамп структуры таблицы в файл и делаете сравнение по файлу.
 

garphild

Постоялец
Регистрация
19 Май 2009
Сообщения
60
Реакции
31
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.`COLUMNS` WHERE table_schema='ПЕРВАЯ БД' AND table_name='ПЕРВАЯ ТАБЛ' AND COLUMN_NAME NOT IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.`COLUMNS` WHERE table_schema='ВТОРАЯ БД' AND table_name='ВТОРАЯ ТАБЛ')

Это сравнить по наличию имен. Поменяв местами названия таблиц можно сравнить наоборот - вторую с первой. Выдаст все расхождения в именах колонок таблиц. Аналогично можно делать сравнение по типу колонок, но чуть сложнее.
Также можно выгрузить представление таблиц в эксель в две таблицы (два листа или рядом две таблицы) и там построчно формулой просто посравнивать и увидеть расхождения.
 
Сверху