1

Тема: Помогите восстановить БД

Суть проблемы в следующем.
При экспорте SQL базы с сервера хостинга, в свойствах экспорта, поствил галочку на "Использовать для бинарных полей шестнадцатеричное отображение". "Благодаря" этому при просмотре базы обычным тектовым редактором, содержание базы нечетабильно, т.е. весь текст зашифрован в виде цифр.
При импорте базы на домашнем компьютере (с предварительно установленными Apache и MySQL сервером), содержание сайта отображается какими-то закорючками... И дело не в кодировке, т.к. я предварительно сверил кодировку SQL сервера хостинга и свою.
Проблема, как ме кажется заключется в неправильном импорте. Т.е. "домашний" SQL сервер неправильно конвертирует дамп базы из Шестнадцатиричной системы.

Можно ли как-нибудь еще переконвертировать дамп базы из Шестнадцатиричной системы в нормальную (т.е. чтобы содержание базы было читабельным в тектовом радакторе) до импорта на домашнем ПК?

Надеюсь, что я более-менее понятно объяснил суть проблемы.
Заранее всем ОГРОМНОЕ спасибо!

2

Re: Помогите восстановить БД

chupaty
Простого решения данной проблемы я не знаю. Но если вы возьмете бинарную строку начинающуюся с 0x, то составив запрос вида
SELECT 0x...
Вы получите изначальные данные в виде строки символов.
Как вариант можно попробовать проделать это со всеми строками и затем вставить их на место бинарных в дамп, но здесь вы сами должны решить, стоит ли этим заниматься, так как при большом количестве данных это можнет занять много времени.

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

3

Re: Помогите восстановить БД

Значит не все так просто...
В том-то и дело, что при импорте дампа базы, никаких ошибо не возникает...

4

Re: Помогите восстановить БД

chupaty
Запрос
SELECT 0x...
возвращает данные? Покажите то что выходит, если получаются нечитаемые символы.

Можно попробовать добавить в дамп перед его импортом, на каждую строку нуждающуюся в перекодировке из шестнадцатеричного вида, следующую функцию переконвертации.
CAST(0x... AS CHAR)
Пример:
INSERT INTO `table_name` (`field_name`) VALUES (CAST(0xD180D183D181 AS CHAR));

5

Re: Помогите восстановить БД

Hanut, данные после запросов благополучно возвращаются в читабельный вид.
Но уж больно много времени займет запись вышеуказанной функции перед каждой строкой, которую необходимо восстановить... может можно сделать какой-нибудь общий запрос, чтобы все данные переконвертились?

6

Re: Помогите восстановить БД

chupaty
Могу предложить для вставки дополнительного запроса, воспользоваться текстовым редактором поддерживающим регулярные выражения (например PSPad) и произвести следующую замену.
Поле Find:
(\(|\s)(0x\w+)(\)|,)
Поле Replace:
$1CAST($2 AS CHAR)$3

Только будьте осторожны, не делайте данную замену во всем файле дампа, выбирайте только те поля таблиц, в которых должны быть текстовые данные, так как подобная замена на бинарных данных картинки или сохраненного в БД файла, его полностью сломает. В общем делайте замену частями и проверяйте корректность данных при импорте их в БД.