Кодировка - в конец запутался - Page 2 Кодировка - в конец запутался - Page 2
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Кодировка - в конец запутался

Started by bubastic, April 13, 2008, 07:53:50 PM

Previous topic - Next topic

0 Members and 3 Guests are viewing this topic.

Makc666

Quote from: LeaX on January 19, 2009, 08:49:43 AM
М-даа, проверила - это у меня оказывается на новом сервере такая вот ерунда.
На старом была cp1251, а на новом этот латин
??? не пойму что мне делать. Латин мне не нужен, потому что это же выходит не русская кодировка?  ???
А мне нужна русская. Хоть какая-нибудь
Создайте базу новую в cp1251, после чего уже импортируйте в неё вашу старую базу.

LeaX

Мммм, легко сказать. У меня на VPS стоит Direct Admin (кстати оказалась очень похожа на простую админку эта штука)
Так вот - там для создания pma тупо пишешь ее название и пароль... и хлоп. Есть у тебя новая pma  :P
Удобно так... но вот выбора кодировки я там не заметила.

Изнутри можно уже как-то поменять latin1 на cp1251?

GeXu3

для начала не помешало бы в файловую систему сетвера поставить свой phpmyadmin на всякий случай :) свой рубашка ближе к телу :) тем более что навряд он у них 3.x.x версии :)
потом можно спокойненько открыть базу данных, сходить в меню "операции" и изменить параметр "сравнение"
еще один путь, довольно безграмотный, но рабочий - если база импортировалась правильно то пример приведённый постом выше должен плясать... единственное что я б сделал это вручную заказал кодировку. Тоесть строку "SET NAMES '$CONFIG[dbcharset]'" переписал бы как "SET NAMES 'latin1'" для latin1 базы... может полегчать...

Однако лично я люблю немного другой приём. Из инструментов нам будут нужны AkelPad (он умеет брать базы весом и по 100 метров. сохраняет в любой кодировке), SypexDumper ну и PMA.
1. Берём в руки дамп, открываем акельпадом. Смотрим глазами на русские буквы. Если открылось правильно - замечательно, дамп хороший и всё такое. Если неправильно - плохо. Если просто кракозябра - подбираем кодировку, если не выходит - снимаем новый дамп.
2. В тексте дампа ищем сначала страшное слово DEFAULT CHARSET или просто charset... если находим - смотрим че мы нашли. У меня, например, это "DEFAULT CHARSET=latin1"... заменяем эту строку на пустую, опять ищем charset и так пока не будет перебиты все места, где мы указываем кодировку таблиц.
3. Точно таким же образом ищем слово collate... у меня это фраза "collate latin1_general_ci" - делаем то же самое, что и в 2, только с новыми значениями.
4. Сейвим под другим именем.

Что у нас теперь на выходе? На выходе у нас чистая отличная база БЕЗ жесткого указания кодировок таблиц. Что это значит? Это значит что в какой кодировке мы её сохраним, в такой кодировке база и будет.
Теперь нет ничего проще заставить сайт работать, ну например в utf8... языковой файл под utf8 у нас уже есть... создаём базу, делаем ей сравнение utf8_general_ci, например, сейвим это дело... идём в акель, открываем новосозданый файл, пересохраняем его в utf8... заливаем на хост sypexdumper и файл в utf кодировке, импортируем его в базу (можно лить не весь файл, а поделить потаблично - посмотреть как оно куски закинет)... подключаемся и пользуемся... /*если сайпексом не выйдет - пробуем лить через PMA... а если хостер позволяет подключение извне, то и navicat использовать очень не грех*/

ВНИМАНИЕ! Могут возникнуть глюки если картинки в альбомах (файлы) названы по-русски.

Инструкцию писал по личному опыту. Весной переносил сайт на новое место - пришлось базу конвертнуть в utf8 (а база была немаленькой - около 100 метров в упакованом виде). Дело в том что в альбомах были файлы с русскими именами, переименовать их ну аж никак не выходило... в итоге имена файлов оказались в utf кодировке... чёб не потерять связь с этим миром пришлось и базу из latin1 перенести в utf8...

Отакие помидоры :)

GeXu3

да, чуть не зыбал.
utf8 это utf8
1251 может зваццо win1251, cp1251, 1251
latin1 же может зваццо latin1, а может 1252
Причем че характерно - если 1251 дамп лить как latin1 (на файле, сохранённом в 1251 поставить кодировку при импорте latin1), то затянет неправильно, хотя кодовые страницы, по сути, одинаковые.

Ну и выходит сто для LeaX самый он вариант, мож и дубовый, но зато сработает:
1. Придумать в какой кодировке она хочет базу
2. Сделать дамп базы данных как я писал выше, но сейвить не в utf8, а в той кодировке что она выберет.
3. Если не заработает сразу - поставить патч что на предыдущей странице она сама и написала, только SET NAMES 'выбраная_тобой_кодировка_названием'.
С вероятностью 99% заработает и проблем не возникнет.

LeaX

QuoteОтакие помидоры
:P точно
GeXu3 все-то у вас вечно как-то заковыристо.
Я начала с того, что пнула хостера - мол какого ... вы тут с кодировками балуетесь?
Не знаю что выйдет  :D
Quote1251 может зваццо win1251, cp1251, 1251
это все разные?   :-X тихий ужас. Понятия не имею, какая мне нужна. Вроде бы cp1251
(судя по пред. странице character_set_database    cp1251)

GeXu3

Ну дело в том что у меня простые проблемы не возникают :) Зачастую валюсь на таком, что не имеет очень простых решений. А способ переноса действительно универсальный. Дело в том что при таком переносе как я написал дамп становится на сервер в той кодировке, на которую настроена база данных и становиццо на удивление правильно :)

LeaX

Ураа, мой способ быстрее сработал  :D  :D  :D - кодировку изменили. 
Правда теперь придется блин перезалить все 3 базы - сайта, форума и галереи  :P потому что только в пустых новых теперь вот так как надо, а в старых вообще кишмиш... мышь-кышь  :-\
Зато стало хоть понятнее, что теперь делать - тупо заливать по-новой и чуть подправить пути.

GeXu3

Но самое обидное, что всё это мона было сделать даже не пиная админов... :D

Beer

 Не могу сконнектить SMF 1.1.8 и Сoppermine... на Денвере получилось, когда установил все с ноля, как подключаю свою БД - слетает. Переконвертировал БД форума в UTF8 - вроде заработало, только название галереи было ������, хотя в базе видел нормально, ну и кодировки при переходе с форума не совпадали. Конвертнул еще раз базу в UTF8 - все стало нормально, только бридж не работает. Мозг уже кипит. Выкачал на хост галерею, там тоже коннекта с форумом нету.
Создал новую БД (без данных) на хосте, выполнил к ней запрос SHOW VARIABLES; и вижу:

character_set_server   cp1251
character_set_system   utf8
character_sets_dir   /usr/share/mysql/charsets/
collation_connection   utf8_general_ci
collation_database   cp1251_general_ci
collation_server   cp1251_general_ci

Кто бы направил ход моей мысли? Не сильно я в этом рублю однако....

Makc666

Quote from: Beer on March 23, 2009, 10:53:51 AM
character_set_server   cp1251
character_set_system   utf8
character_sets_dir   /usr/share/mysql/charsets/
collation_connection   utf8_general_ci
collation_database   cp1251_general_ci
collation_server   cp1251_general_ci

Кто бы направил ход моей мысли? Не сильно я в этом рублю однако....
Для галереи вы должны наложить патч:
http://forum.coppermine-gallery.net/index.php/topic,49624.msg238431.html#msg238431
и прописать там кодировку UTF8

Тоже самое должны сделать и для форума.
Если я не ошибаюсь, то примерно так:

1. Открыть файл index.php

2. Найти код:
// Connect to the MySQL database.
if (empty($db_persist))
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
else
$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);


3. Заменить на:
// Connect to the MySQL database.
if (empty($db_persist)){
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
mysql_query("SET NAMES 'utf8'",$db_connection);
}else{
$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
}




Beer

Да, спасибо Makc666 - на Денвере заработало все классно!
Причем в ../include/functions.inc.php я патч не вписал  ???, на сайте не могу проверить - инет страшно тормозит.

Makc666

Quote from: Beer on March 24, 2009, 07:46:31 PM
Причем в ../include/functions.inc.php я патч не вписал  ???, на сайте не могу проверить - инет страшно тормозит.
Это может повлечь за собой некорректное внесение записей в базу данных, что затруднит дальнейшую работу.

Beer


../include/functions.inc.php

diff -crbBN include/functions.inc.php include/functions.inc.php
*** include/functions.inc.php   Tue Nov  6 07:48:00 2007
--- include/functions.inc.php   Wed Jan  9 12:44:29 2008
***************
*** 184,189 ****
--- 184,192 ----
          }
          if (!mysql_select_db($CONFIG['dbname']))
                  return false;
+                 if ($CONFIG['dbcharset']) {
+                   mysql_query("SET NAMES '$CONFIG[dbcharset]'",$result);
+                 }
          return $result;
  }

Чота не получается его вписать у меня - ошибка на строке diff -crbBN include/functions.inc.php include/functions.inc.php....
Может сам файл дашь поглядеть?

Tue Nov  6 07:48:00 2007
Wed Jan  9 12:44:29 2008
- там разве нужны?

На хосте выглядит так:
TEST GALLERY - ????
TEST GALLERY - ���� :'(

Makc666

Quote from: Beer on March 24, 2009, 10:31:47 PM
Чота не получается его вписать у меня - ошибка на строке diff -crbBN include/functions.inc.php include/functions.inc.php....
Может сам файл дашь поглядеть?
1. Открыть файл:
functions.inc.php

2. Найти код:
          if (!mysql_select_db($CONFIG['dbname']))
                  return false;


3. Добавить после код:
                 if ($CONFIG['dbcharset']) {
                   mysql_query("SET NAMES '$CONFIG[dbcharset]'",$result);
                 }



И не забывайте про файл:
../include/config.inc.php
дописать строку:
$CONFIG['dbcharset'] = "";
, в которой указать кодировку базы данных галереи!

Всё просто :)

Beer

 Заработало - спасибо! Только интеграция опять отвалилась :'( после восстановления БД на хосте. Чота у меня либо одно, либо другое работает, но ни как не вместе... ;D
Крайне тонка грань.....

character_set_client   utf8
character_set_connection   utf8
character_set_database   utf8
character_set_filesystem   binary
character_set_results   utf8
character_set_server   cp1251
character_set_system   utf8
character_sets_dir   /usr/share/mysql/charsets/
collation_connection   utf8_general_ci
collation_database   utf8_general_ci
collation_server   cp1251_general_ci
init_connect   SET NAMES cp1251

Beer

Закачал на хост, удалил таблицы галереи из БД, проинсталлировал галеру на хосте в базу форума.
В smf10.inc.php прописал:
        require_once('../forum/SSI.php');
        $boardurl = 'http://www.сайт.ru/forum';
Стр. 56 'host' => $db_server ? $db_server : 'mysql4.имяхоста.ru',

Включаю бридж - не могу войти в галерею.

Makc666

Quote from: Beer on March 25, 2009, 11:52:29 AM
Закачал на хост, удалил таблицы галереи из БД, проинсталлировал галеру на хосте в базу форума.
В smf10.inc.php прописал:
        require_once('../forum/SSI.php');
        $boardurl = 'http://www.сайт.ru/forum';
Стр. 56 'host' => $db_server ? $db_server : 'mysql4.имяхоста.ru',

Включаю бридж - не могу войти в галерею.

Не совсем понял, но может имена cookies вы опять забыли сделать одинаковыми? :)

Beer

 Поставил в галере куки как на форуме - SMFCookie406. При обращении к главной странице постоянно отсылает на форму ввода логина, после ввода логина - опять.... :(
Вышел из форума, вошел и ... оказался в галерее залогиненным!  Но ведь на локале и с разными куками у меня работало... ???
Makc666 - отдельное спасибо за плоды просвещения ... :) Пошел юзать дальше.

Beer

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

Makc666

Quote from: Beer on March 26, 2009, 01:51:48 PM
Сегодня не мог попасть в галерею, пока не вышел из форума, потом залогинился и попал редиректом в галерею, а не на форум.  ???
Т.е. кто будет регистрироваться и логиниться, все будут сначала попадать в галерею.
В бридже всегда было настроено так, что откуда логинитесь, туда и возвращаетесь.