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

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

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
Сегодня не мог попасть в галерею, пока не вышел из форума, потом залогинился и попал редиректом в галерею, а не на форум.  ???
Т.е. кто будет регистрироваться и логиниться, все будут сначала попадать в галерею.
В бридже всегда было настроено так, что откуда логинитесь, туда и возвращаетесь.