Добавление возможности перекодирования базы latin1 в utf8

Предложения по новым функциям, улучшениям и др.

Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 19.11.2009 08:09:59

Здравствуйте! Программа отличная, бэкап и востановление базы делает безотказно, за что большой Вам респект. Но к примеру хочу перекодировать старую базу 4.1 с кодировкой latin1 в новую базу версии 5 с кодировкой utf8. Положительные черты latin1, то что при бакапе там виден русский язык, то есть коды символов частично соответствуют. Но latin1 не все языки поддерживает. utf8 поддерживает большинство языков, но в дампе базы русский язык не виден.
Попыталя перекодировать базу из latin1 в utf8. Мой порядок действий:

1) Делаю бэкап старой базы, которая в кодировке latin1, при этом ставлю в опциях экспорта кодировку - авто. Получается дамп базы с кодировкой latin1;
2) Делаю восстановления этого дампа в новой базе utf8, выбирая при этом кодировку при импорте utf8. Результат - база импортируется со старой кодировкой Latin1.

Второй вариант моих действий
1) Делаю экспорт базы latin1, выбирая при этом кодировку utf8. При этом как будто получается дамп базы с кодирвкой UTF8. Но когда делаю востановление этого дампа в новой базе utf8, вместо русского языка нечитаемый набор символов, вроде этого.

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

Очень бы хотелось эту фичу в будущих версиях. Успехов!

С уважением, Александр
Вложения
utf8error19112009.jpg
utf8error19112009.jpg (13.49 Кб) Просмотров: 440654
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 24.11.2009 18:36:20

Чтобы сделать правильно конвертирование нужно сначала преобразовать данные в cp1251. Так как latin1 не подходит для кириллицы.
1. Сделайте бэкап в кодировке auto.
2. Восстановите выбрав кодировку cp1251 и опцию Коррекция кодировки.
После этого у вас будет база в кодировке cp1251. Терерь преобразовываем её в utf8.
3. Сделайте бэкап в кодировке utf8.
4. Восстановите выбрав кодировку utf8 и опцию Коррекция кодировки.
Всё теперь база будет в utf8.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 24.11.2009 19:48:48

Сделал, как Вы сказали, после восстановления с корректировкой в cp1251, на сайте вместо русских букв знаки вопроса. Решил сделать дамп этой базы auto и восстановить в utf8 с корректировкой, не восстановилась, остановилось на 3,8%
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 24.11.2009 20:34:35

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

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 24.11.2009 20:57:40

Здесь скрипт http://monamour-dating.com/top1/ использует базу UTF8, база заполнялась через сайт, никакого указания в файлах скрипта по поводу кодировки mysql нет, этот скрипт можно скачать отсюда http://www.aardvarktopsitesphp.com/down ... .2.1&f=zip . Как видите никаких проблем с русским языком
Вот бэкап этой базы, видно, что эта база UTF8
Вложения
base4_2009-11-24_11-04-57.sql.gz
(2.45 Кб) Скачиваний: 15484
Последний раз редактировалось alexander70 24.11.2009 21:08:51, всего редактировалось 1 раз.
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 24.11.2009 21:08:48

Просто нужно понимать одну вещь, что сервер MySQL может работать со множеством кодировок, и когда скрипт подключается к MySQL нужно указать в какой кодировке Вы будете с ним общаться, если этого не сделать то будет использована кодировка по-умолчанию latin1.
По указанной ссылке и не пахнет кодировка utf8, там кодировка cp1251, она же windows-1251.
Почему Вы решили, что скрипт работает в utf8?
Насчет никаких проблем, это вы просто с ними еще не столкнулись, проблемы в том что mysql думает что данные в latin1, в результате поиск и сортировка по алфавиту будут не совсем правильные, кроме того будут проблемы с бэкапом стандартными средствами (например, mysqldump будет конвертить всё в utf8 при бэкапе и запорет дамп).
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 24.11.2009 21:11:52

Вот бэкап этой базы, по нему видно, что база в UTF8. В полне с Вами согласен, не хочу с Вами спорить, но в реальном скрипте я не нашел упоминания, в какой кодировке должна работать MySQL. Может я пропустил что-то, а вы обнаружите это упоминание? Вот этот скрипт http://www.aardvarktopsitesphp.com/down ... .2.1&f=zip
Вложения
base4_2009-11-24_11-04-57.sql.gz
(2.45 Кб) Скачиваний: 15754
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 24.11.2009 21:35:27

Вот именно за такие скрипты нужно давать по голове авторам, которые абсолютно не понимают, как работать с кодировками. Так база то в utf8, но Вы в неё записываете данные в cp1251, используя при соединении latin1. В итоге получается смесь, в чем можете убедиться, например, попытаться найти русские буквы в файле дампа, или зайдя в phpmyadmin. Если бы скрипт правильно использовал utf8, то в любой другой программе данные показывались бы правильно. Плюс сам сайт должен быть также в utf8, у вас же получается при каждом обращении к MySQL конвертируются данные из utf8 в latin1 и обратно.

Повторюсь, мало выставить кодировку cp1251 или utf8 для таблиц, нужно чтобы скрипты также работали в соответствующих кодировках, т.е. в скрипте после коннекта к базе должен быть вызов "SET NAMES название_кодировки".

Чтобы нормально преобразовать базу в вашем случае.
1. Сделать дамп выбрав latin1.
2. Восстановить выбрав кодировку cp1251 и коррекцию кодировки.
3. Сделать бэкап в utf8
4. Восстановить бэкап в utf8 и коррекция кодировки.

После чего в скрипт после mysql_connect нужно добавить строку
Код: Выделить всё
mysql_query("/*!40101 SET NAMES 'utf8' */") or die("Error: " . mysql_error());


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

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 24.11.2009 21:43:25

При экспорте дампа этого скрипта соединение было тоже UTF8. По поводу перевода сайта в UTF8, можно подробней? Как это сделать? Пытался, но не получилось.
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 24.11.2009 21:48:34

А что означает в интерфейсе программы в выборе таблиц? вначале галочка, потом черный квадратик и только потом галочка убирается.
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 24.11.2009 22:19:52

Черный квадратик это бэкап только структуры.

Проделайте для начала описанные выше 4 действия. После чего проверьте нормально ли видно русские символы в phpmyadmin или другом mysql клиенте. После чего уже можно будет заняться перекодировкой самого скрипта.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 25.11.2009 21:55:53

Проделал эти 4 пункта, в phpmyadmin виден русский язык, на сайте знаки вопроса вместо русских букв.
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 26.11.2009 16:06:03

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

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 28.11.2009 20:06:28

Добрый день!
Сейчас у меня другая первоочередная задача. Перевел сайт на кодировку UTF8 , эксперементирую здесь: http://monamour-dating.com/azdgmedium/index.php?l=ru . После перевода сайта в UTF8, все данные на кирилице, которые были до перевода, стали нечитаемые (черные квадратики). Новые пользователи регисртрируются нормально (это тоде видно на сайте), русский язык нормально отображается. Как исправить базу, чтобы все данные на кирилице, которые были до смены кодировки сайта, нормально читались? База MySQL работает в кодировке UTF8.

С уважением, Александр
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 28.11.2009 22:23:28

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

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 28.11.2009 23:11:30

До смены кодировки все данные на сайте были в порядке. В phpmyadmin не в порядке сейчас и не было в порядке до смены кодировки ,когда на сайте все было нормально и был виден русский язык. В Панеле администрирования можно прописать работу с кодировкой базы utf8 или latin1, но можно и не заполянть, сайт работает нормально, новые анкеты показываются как надо, все шрифты видны. Проблема с базой до смены кодировки, чтобы эта часть базы нормально на сайте отоброжалась.
Вложения
phpmyadmin.jpg
phpmyadmin.jpg (14.05 Кб) Просмотров: 440563
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 29.11.2009 18:08:43

Забудьте слова "сайт работает нормально" пока phpmyadmin не показывает русские символы. В вашем случае сайт неправильно записывает и также неправильно достает данные из базы поэтому и кажется нормальным.
cp1251 и cp1252 (она же latin1) однобайтные кодировки т.е. разные символы в них имеют одинаковые коды, к примеру код 192 - буква Б в (cp1251) и буква Á (в latin1). Это не очень важно когда данные просто выводятся, но когда проводится поиск или сортировка это важно, т.к. в кодировке еще хранится соответствие между строчным и заглавными буквами. UTF8 же содержит в себе все символы (несколько десятков тысяч), поэтому у букв Б и Á уже разные коды, вот почему вы видите именно символы латиницы в UTF8.
Поэтому сначала нужно преобразовать кодировку в 1251, а потом уже преобразовывать в utf8.
Можете прислать дамп базы гляну что там не так.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 29.11.2009 21:02:07

Спасибо, отправил Вам дамп на e-mail.
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST alexander70 » 30.11.2009 08:22:27

Спасибо, что поправили дамп. При попытке импорта через Вашу программу, импорт застопорился на 14 процентах. Через php myadmin тоже не захотел импортироваться, пока я не удалил старые таблицы. Вообще, дамп с новой версии программы не импортируются через phpmyadmin, пока не удалишь старые таблицы, выводится сообщение об ошибке:

Ошибка
SQL-запрос:
#SXD20|20005|50139|50211|2009.11.29 21:48:59|test_29|0|55|940| #TA 193_addressbook`76`1748|193_addressbook_archive`0`0|193_affiliates`0`0|193_allhits`0`0|193_art`0`0|193_art_cat`0`0|193_bad`0`0|193_banlist`0`0|193_blacklist`0`0|193_blogs`0`0|193_blogs_cat`0`0|193_blogs_com`0`0|193_blogs_vote`0`0|193_cards`0`0|193_comments`0`0|193_coupons`0`0|193_faq`0`0|193_faq_cat`0`0|193_forum`0`0|193_forum_cat`0`0|193_forum_messages`0`0|193_forum_search`0`0|193_forum_threads`0`0|193_hits`25`425|193_hotornot`0`0|193_ip2country`0`0|193_links`37`62684|193_links_cat`1`40|193_mail`0`0|193_membersu`0`0|193_membersu_ext`120`28820|193_membersu_forum`158`3160|193_membersu_main`120`46440|193_membersu_restricts`0`0|193_membersu_sec`120`5772|193_messages`72`16752|193_messages_archive`0`0|193_new_photos`0`0|193_news`0`0|193_notes`0`0|193_onlineu`0`0|193_options`2`54|193_pmembersu`0`0|193_private_photos`0`0|193_profileview`179`3043|193_recommend`0`0|193_room`3`244|193_search`9`5464|193_subscribe`0`0|193_temp`18`1[...]
Ответ MySQL:
#1050 - Table '193_addressbook' already exists


Вообщем, я удалил все старые таблицы и все-таки импортировал Ваш файл. На этот раз в phpmyadmin виден русский язык, а на сайте вместо квадратиков знаки вопроса: http://monamour-dating.com/azdgmedium/

Что не так в этом скрипте, что когда в phpmyadmin кракозябры, на сайте нормально показывается? Этот скрипт здесь: http://azdg.com/scripts.php#2


С уважением, Александр
Вложения
phpmyadmin30112009.jpg
phpmyadmin30112009.jpg (24.53 Кб) Просмотров: 440554
alexander70
 
Сообщения: 69
Зарегистрирован: 18.11.2009 22:31:51

Re: Добавление возможности перекодирования базы latin1 в utf8

UNREAD_POST zapimir » 30.11.2009 16:50:03

В скрипте нужно после mysql_connect добавить
Код: Выделить всё
mysql_query("/*!40101 SET NAMES 'utf8' */") or die("Error: " . mysql_error());

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

След.

Вернуться в Предложения

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

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