Ошибка при конвертировании базы в UTF8

Что-то не работает? Пишите здесь.

Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 04.07.2011 22:31:10

Столкнулся с проблемой смены кодировки в базе.
Исходные данные:
Есть база с таблицами в двух кодировках latin1_swedish_ci и cp1251_bin. Данные в базу записаны преимущественно в кодировке cp1251, но есть небольшое количество в какой-то другой (нечитаемой и как определить не знаю). Хотелось бы переконвертировать её в UTF8.

Но при выполнении действий:
1. Создание бэкапа с выбранной кодировкой UTF8
2. Создание базы в UTF8
3. Импорт бэкапа с выбранной кодировкой UTF8 и галочкой Коррекция кодировки. На этом этапе возникает ошибка Duplicate entry '??????' for key 2"

Что я делаю не так? Подскажите пожалуйста.
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST Михаил_fet » 05.07.2011 12:36:21

Скажите а на чем вы проводили операцию?
Михаил_fet
 
Сообщения: 22
Зарегистрирован: 05.06.2011 13:20:08

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST zapimir » 05.07.2011 16:14:17

Вам сначала нужно чтобы кодировка данных совпадали с информацией о кодировке в таблице.
Для этого сначала сделайте дамп в кодировке авто, и восстановите (желательно в какую-то временную базу) выбрав кодировку cp1251 и галочку Коррекция кодировки.
После этого у вас данные и кодировка таблиц будет cp1251 (можно дополнительно проверить, правильно ли выводятся русские буквы в phpmyadmin или Sypex Viewer)
Теперь можно перекодировать в UTF-8, по описанным вами действиям.

В Sypex Dumper Pro можно сделать проще, там есть в разделе сервисы пункты изменить и исправить кодировку.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 05.07.2011 16:23:01

Михаил_fet писал(а):Скажите а на чем вы проводили операцию?


Не понял вопроса.

Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze1 with Suhosin-Patch
Версия MySQL-клиента: 5.1.49
PHP расширение: mysqli

Вы это имели ввиду?
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 05.07.2011 16:26:01

zapimir писал(а):Вам сначала нужно чтобы кодировка данных совпадали с информацией о кодировке в таблице.
Для этого сначала сделайте дамп в кодировке авто, и восстановите (желательно в какую-то временную базу) выбрав кодировку cp1251 и галочку Коррекция кодировки.
После этого у вас данные и кодировка таблиц будет cp1251 (можно дополнительно проверить, правильно ли выводятся русские буквы в phpmyadmin или Sypex Viewer)
Теперь можно перекодировать в UTF-8, по описанным вами действиям.

В Sypex Dumper Pro можно сделать проще, там есть в разделе сервисы пункты изменить и исправить кодировку.


zapimir спасибо, попробую сделать как вы описали
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 05.07.2011 21:19:50

zapimir, сделал всё как вы посоветовали, но во время импорта возникла ошибка
MySQL Error: Duplicate entry 'common.langDirLtr--1-ckeditor' for key 'name_lang_type' (/sxd/index.php:1584)

Проверил что получилось в тех таблицах, которые удалось импортировать. Все фразы на русском в виде вопросов.
Что посоветуете?
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST zapimir » 06.07.2011 19:28:23

Можете сделать дамп в кодировке auto и прислать ссылку на него в личку, гляну что там с ним.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 06.07.2011 20:15:39

zapimir писал(а):Можете сделать дамп в кодировке auto и прислать ссылку на него в личку, гляну что там с ним.


К сожалению, дамп очень большой, около 1ГБ, но это из-за картинок в базе. Попробую что-нибудь придумать
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 06.07.2011 20:43:15

Кажется я понял причину. В исходной базе поле имеет коллейшен latin1_bin. А таблица содержит одинаковые данные в разном регистре.
Когда импортируешь с Коррекцией кодировки, дампер создаёт все таблицы и поля в cp1251_general_ci, в результате повтор не добавляется.
Пробовал создать базу с коллейшеном по умолчанию cp1251_bin и импортировать дамп в неё, но не помогло, всё равно все поля в cp1251_general_ci
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST zapimir » 08.07.2011 18:39:28

Попробуйте делать дамп частями, например исключить те таблицы в которых проблема, а потом проблемные таблицы отдельно сдампить. В плане размеров дампа особой разницы для меня нет, анлим 100 Мбит. Но в принципе нужен минимальный дамп на котором воспроизводится ошибка, не обязательно полный дамп.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 08.07.2011 21:45:33

Я вчера уже отправил вам дамп. Если не получили, то сейчас пришлю. Он как раз содержит проблемную таблицу.
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST Михаил_fet » 09.07.2011 01:03:26

Не понял вопроса.

Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze1 with Suhosin-Patch
Версия MySQL-клиента: 5.1.49
PHP расширение: mysqli

Вы это имели ввиду?

Я имею ввиду, вы делали конверацию через движок или через что то другое?
Михаил_fet
 
Сообщения: 22
Зарегистрирован: 05.06.2011 13:20:08

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST SuhovDE » 11.07.2011 12:37:09

Михаил_fet писал(а):
Не понял вопроса.

Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze1 with Suhosin-Patch
Версия MySQL-клиента: 5.1.49
PHP расширение: mysqli

Вы это имели ввиду?

Я имею ввиду, вы делали конверацию через движок или через что то другое?


Я делал конвертацию с помощью Sypex Dumper 2.08
SuhovDE
 
Сообщения: 9
Зарегистрирован: 04.07.2011 22:21:10

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST Bask » 11.03.2012 11:23:07

Такая же ситуация. Подозреваю, что это связано с тем, что там в таблице два поля с одинаковыми именами, различаются только регистры - langDirLtr и langDirLTR.
Удалось решить проблему? Если да, то не поделитесь опытом?
Bask
 
Сообщения: 2
Зарегистрирован: 11.03.2012 11:17:37

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST Bask » 11.03.2012 17:22:50

Разобрался, делюсь опытом...
действительно, в таблице _phrase есть 4 поля:
common.langDirLTR
common.langDirLtr
и
common.langDirRTL
common.langDirRtl

если тип сравнения ut8_general_ci, то сравнение не различает регистр и база выдает ошибку типа
ERROR 1062 (23000) at line 49: Duplicate entry 'common.langDirLtr--1-ckeditor' for key 2

поменял вручную сравнение на ut8_bin - сравнение идет бинарное, и ошибка больше не появляется.

успехов ))
Bask
 
Сообщения: 2
Зарегистрирован: 11.03.2012 11:17:37

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST Alivko » 26.03.2012 13:09:45

Переносим форум vbulletin на новый хостинг masterhost возникла необходимость поменять и сделать нормальную кодировку в utf-8 в итоге получили ошибку вида:
MySQL Error: Duplicate entry \'common.langDirLtr-3-ckeditor\' for key \'name_lang_type\' (..../www/sxd/index.php:1581)

Выше описано решение (но оно не совсем понятно)
Как найти эти записи в базе данных?
"действительно, в таблице _phrase есть 4 поля:
common.langDirLTR
common.langDirLtr
и
common.langDirRTL
common.langDirRtl"

если тип сравнения ut8_general_ci, то сравнение не различает регистр и база выдает ошибку типа ERROR 1062 (23000) at line 49: Duplicate entry 'common.langDirLtr--1-ckeditor' for key 2
поменял вручную сравнение на ut8_bin - сравнение идет бинарное, и ошибка больше не появляется.

как ты поменял вручнуюб сравнение на именно эти позиции?

Опишите подробнее если не сложно.. Заранее ОГРОМНОЕ спасибо!
Alivko
 
Сообщения: 1
Зарегистрирован: 26.03.2012 12:25:07

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST zapimir » 29.03.2012 14:59:59

Можно такие таблицы восстанавливать со стратегией восстановления INSERT IGNORE. В таком случае дубликаты игнорируются. Если хотите можете скинуть ссылку на дамп в личку, я поправлю и напишу, детали как исправлять.

Также рекомендую почитать статью об исправлении кодировок
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST Romchik® » 11.05.2012 15:31:18

А что дает опция "INSERT IGNORE"? Она просто игнорирует "повторяющиеся" строки? Судя по тому, что в оригинальной таблице записей 31,085, а после восстановления 31,081, то 4 записи (то бишь фразы, т.к. это таблица phrase) не были импортированы, верно?
Тогда этот способ не совсем подходит.


[Очередной камень в сторону vB4]
Да уж, мало проблем с CKEditor в целом, так еще в таблице фраз vBulletin 4 теперь еще эта проблема.

Проблемные записи, вдруг кому интересно:
Код: Выделить всё
(82991,-1,'common.langDirLTR','ckeditor','Left to Right (LTR)','vbulletin','vBulletin Solutions',1299264962,'4.1.4 Beta 1',0),
(82992,-1,'common.langDirLtr','ckeditor','Left to Right (LTR)','vbulletin','vBulletin Solutions',1299264962,'4.1.4 Beta 1',0),
(82993,-1,'common.langDirRTL','ckeditor','Right to Left (RTL)','vbulletin','vBulletin Solutions',1299264962,'4.1.4 Beta 1',0),
(82994,-1,'common.langDirRtl','ckeditor','Right to Left (RTL)','vbulletin','vBulletin Solutions',1299264962,'4.1.4 Beta 1',0),

(93222,2,'common.langDirLTR','ckeditor','Слева направо (LTR)','vbulletin','zCarot',1299264962,'4.1.4 Beta 1',0),
(93223,2,'common.langDirLtr','ckeditor','Слева направо (LTR)','vbulletin','zCarot',1299264962,'4.1.4 Beta 1',0),
(93224,2,'common.langDirRTL','ckeditor','Справа налево (RTL)','vbulletin','zCarot',1299264962,'4.1.4 Beta 1',0),
(93225,2,'common.langDirRtl','ckeditor','Справа налево (RTL)','vbulletin','zCarot',1299264962,'4.1.4 Beta 1',0),
Romchik®
 
Сообщения: 3
Зарегистрирован: 04.11.2009 12:18:31
Откуда: EU

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST zapimir » 11.05.2012 16:46:32

INSERT IGNORE игнорирует строки когда совпадают ключи индекса. Это может быть полезно в таблицах поискового индекса, когда из-за неправильной кодировки в таблицы писались слова с буквами в разном регистре. Т.е. там были и "Слово" и "слово", и "СлОвО".

Можете прислать дамп этой таблице в кодировке auto, гляну, а то я vB практически не имею дела. Глянем, что там и как.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Ошибка при конвертировании базы в UTF8

UNREAD_POST TAIFUN » 23.05.2012 20:25:07

Здравствуйте.
Столкнулся с такой проблемой: есть дамп БД движка vBulletin 4 в кодировке cp1251, делаю импорт базы в движок XenForo 1.1.1 указав в импортёре кодировку cp1251, но в результате данные в phpMyAdmin в крокозябрах http://snegforum.ru/index.php
Я попробовал изменить кодировку с помощью PRO версии, с помощью 1.0.8 версии + перепробовал разные варианты - всё безрезультатно :( Конвертирование форумов делаю не первый раз, раньше удавалось без проблем сконвертировать vB в кодировке cp1251 на XenForo в кодировку UTF-8, а сейчас никак не получается.
Не могу понять почему Sypex не хочет производить конвертацию кодировки БД :(
TAIFUN
 
Сообщения: 29
Зарегистрирован: 03.11.2010 20:10:07

След.

Вернуться в Проблемы и баги

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 9

Яндекс.Метрика