1

Тема: mysqldump и последствия с кодировками

Добрый день, делался дамп базы через mysqldump, все базы были в latin1_swedish_ci, данные в каких кодировках были неизвесно. Далее пытался залить дамп при помощи mysql и в итоге все кодировки слетели. Через phpmyadmin посмотреть данные можно в нормальном виде указав сопоставление таблиц с latin1_swedish_ci.
В дампе около 6 разных баз. Версия mysql 5.0.75

http://91.207.210.157/fdb1.sql - 1 примерник
http://91.207.210.157/fdb2sql - 2 примерник

Нужно хотя бы вернуть все как раньше, а в идеале я бы хотел перевести в cp1251.

Раньше дефолт кодировка бд была latin1.

2

Re: mysqldump и последствия с кодировками

Tooler
Создайте БД в кодировке cp1251:

CREATE DATABASE `db_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

В первом случае требуется перекодировать крякозябы в кириллицу. Скрипт перекодировки и инструкции по его использованию отправил вам на почту.
Уберите из дампа все строки вида:
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;

Отредактируйте структуры всех таблиц установив кодировку (в самый конец структуры):
...) DEFAULT CHARSET=cp1251;

Во втором варианте дампа, где кириллица отображается нормально, следует только отредактировать структуры таблиц прописав  DEFAULT CHARSET=cp1251 и удалить ненужные строки указанные выше. Обратите внимание, что для этого дампа, в phpMyAdmin на странице импорта следует выбрать кодировку файла utf8.

Далее вам следует разобраться с кодировкой соединения с MySQL.
Выполните запрос и покажите его результат:

SHOW GLOBAL VARIABLES LIKE 'char%';

3

Re: mysqldump и последствия с кодировками

Пробовал разобраться с первым случаем. Ставил иллегал черектер Тринслит и Игнор, все вермя выводит детектед иллегал черектер.

4

Re: mysqldump и последствия с кодировками

Tooler
Не знаю причины по которой скрипт перекодировки работает не у всех.
Могу только предложить отослать дамп мне для перекодировки на hanut@php-myadmin.ru
Запакуйте дамп в .zip архив.

5 (изменено: Tooler, 2009-02-24 16:04:54)

Re: mysqldump и последствия с кодировками

Отправил, там ещё некоторые проблемы с 2м случаем.
Вот кстате вывод SHOW GLOBAL VARIABLES LIKE 'char%'
character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/local/share/mysql/charsets/

6

Re: mysqldump и последствия с кодировками

Tooler
В перекодированном дампе обратите внимание на строку, которая находится сверху:
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db` /*!40100 DEFAULT CHARACTER SET latin1 */;
Она устанавливает изначальную кодировку таблиц БД в latin1, что необходимо изменить на cp1251 (изменения уже внесены в дамп):
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db` /*!40100 DEFAULT CHARACTER SET cp1251 */;

На странице импорта в phpMyAdmin выберите кодировку дампа windows-1251.
После импорта проверьте правильно ли установились сравнения таблиц в cp1251_general_ci, и нормально ли отображается кириллица.

По второму дампу, видно, что он импортировался в utf8 вместо cp1251. Посмотрите нет ли в дампе строк на подобии указанной выше для создания БД. Если есть, то установите cp1251. Как вариант, БД можно создать вручную в необходимой кодировке, до импорта дампа.
На странице импорта в phpMyAdmin кодировка файла должна быть utf8. Это важно!
Посмотрите созданные таблицы, в какой они кодировке.

Еще один момент, в обоих случаях, перед импортом дампа, полностью удалите старые БД.

7

Re: mysqldump и последствия с кодировками

Так.
Первый случай создал базу сам
CREATE DATABASE `db_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
Залил данные по инструкции - все ок и работает. Но как я понял mysqldump инкрементные таблици потерял... Прийдется вручную создавать и прописать.

Второй случай, никаких ошибок в базе вроде нету, SET тоже нету. Базу создаю вручную все тем же запросом, делалось все по вашим указаниям. sad
CREATE DATABASE `db_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

8

Re: mysqldump и последствия с кодировками

В дампе нигде auto_increment нет. Вероятно ошибка создания.

Во втором случае, таблицы в cp1251 создаются? Кириллица в phpMyAdmin как выглядит?

9

Re: mysqldump и последствия с кодировками

Во втором случае все таблицы в cp1251, еси ставить сопоставление с cp1251 все видно. Если UTF - 8 криво.

10

Re: mysqldump и последствия с кодировками

Tooler
А где вы сопоставление меняете? Что-то я не понял.

11

Re: mysqldump и последствия с кодировками

Имеется ввиду, чтобы увидеть данные в нормальном виде, нужно поставить сопоставление бд с cp1251 в phpmyadmin (это после всех операций).

Пробовал залить другую бд, в дампе везде cp1251 при заливке utf8. База в ср1251 также но на сайте знаки вопроса.

12

Re: mysqldump и последствия с кодировками

Tooler сказал:

Имеется ввиду, чтобы увидеть данные в нормальном виде, нужно поставить сопоставление бд с cp1251 в phpmyadmin (это после всех операций).

Я не понимаю где и как вы это делаете. Опишите по шагам. После импорта ничего менять не надо. Меня интересует именно то, как выглядят данные сразу после импорта и какие устанавливаются кодировки таблиц.

Tooler сказал:

Пробовал залить другую бд, в дампе везде cp1251 при заливке utf8. База в ср1251 также но на сайте знаки вопроса.

Не смог понять, что вы написали. "в дампе  везде cp1251" - где именно в дампе, или это сам дамп в cp1251? "при заливке utf8" - где вы видите utf8, это таблицы имеют такую кодировку, или данные перекодируются в utf8?

13 (изменено: Tooler, 2009-02-25 17:24:30)

Re: mysqldump и последствия с кодировками

1. Создаю базу при помощи запроса CREATE DATABASE `db_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
2. В дампе убираю все
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
3. В конце каждой структуры таблицы дописываю DEFAULT CHARSET=cp1251;
4. Заливаю дамп в базу, установив Кодировка файла: UTF-8
5. Залилось, смотрю данные и они в виде отличная новость. спасибо!, на сайте такой же вид.

6. Захожу на главную страницу phpmyadmin, выставляю сопоставление бд с cp1251 (больше ничего не делаю) захожу в свою бд и вижу данные в норм виде. Если поставить сопоставление с utf8 (и больше ничего не делать) данные будут как в п.5


Как и писал раньше, могу предоставить доступ к своей админке и т.д. для более быстрого решения проблемы.

14

Re: mysqldump и последствия с кодировками

Tooler
Попробуйте перед импортом выставить на главной сравнение в cp1251_general_ci.
Судя по всему phpMyAdmin у вас подключен не через root.

15

Re: mysqldump и последствия с кодировками

Выставил, залил, не помогло.

16

Re: mysqldump и последствия с кодировками

Tooler
Через root phpMyAdmin подключен, или нет?
Тот дамп, что находится в ANSI импортируется нормально? Это тот, что вы мне присылали для перекодирования.

17

Re: mysqldump и последствия с кодировками

Подключен через root, если имеется виду как залогинен в phpmyadmin.
Дамп который я давал после вашего перекодирования работает хорошо, правда база данных та не для веб проекта, но все же.
Эта база данных движка сайта DLE в начальном виде и сейчас она после заливки выдает см. п.5 поста #13
Чувствую что нужно перекодировать её?

Ещё есть 2 базы форумов SMF =\
Сплошные неудачи.

18

Re: mysqldump и последствия с кодировками

Tooler
Пришлите дамп, перекодирую его в ANSI, может сработает. Странное поведение при импорте, не могу понять причину.

19

Re: mysqldump и последствия с кодировками

Отправил.