forum.coppermine-gallery.net

Support => Русский (Russian) => Language Specific Support => cpg1.4.x FAQ (Russian) => Topic started by: bubastic on April 13, 2008, 07:53:50 pm

Title: Кодировка - в конец запутался
Post by: bubastic on April 13, 2008, 07:53:50 pm
CPG 1.14.16

Версия сервера: 5.0.51
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: UTF8_unicode_ci
Базы данных: (CPG) utf8_general_ci

Сравнение: (когда выбираем БД, напротив назв. табл.)  cp1251_general_ci

в PHPMyAdmin / таблицы (albums) / обзор  -  абракодабра

В самом альбоме почти все отлично,
кодировка в броузере Auto-select / Unicode (UTF-8)
"ш" показывается,
во View Source на всех страницах - русский нормально
кроме:
Code: [Select]
[URL=http://radikal.ru/F/i024.radikal.ru/0804/1c/e8f3b3100c57.gif.html][IMG]http://i024.radikal.ru/0804/1c/e8f3b3100c57t.jpg[/img][/URL]
и во View Source этой страницы - русский аброкадабра, кроме
Code: [Select]
$bbcode_data .= '<tr><td>BB-code: [b]Картинка в тексте[/b][url][img][/url]</td></tr>';
$bbcode_data .= '<tr><td><INPUT class="incode" readonly="readonly" onclick="f2(this);" ondblclick=\'copy_clip("'.$name_url.'")\' value='.$img_url.'>
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 13, 2008, 07:57:42 pm
опечатался CPG - 1.4.16
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on April 14, 2008, 06:26:30 pm
Прочитайте данную тему Кодировка в MySQL 4.1.* и MySQL 5.* (http://forum.coppermine-gallery.net/index.php/topic,49624.0.html) повнимательнее...

Также не ясно, зачем у Вас "Сравнение: (когда выбираем БД, напротив назв. табл.)  cp1251_general_ci". 
Title: Re: Êîäèðîâêà - â êîíåö çàïóòàëñÿ
Post by: bubastic on April 14, 2008, 06:54:53 pm
Вот этого я не знаю, как создалось, так создалось

Спасибо за линк, сейчас посмотрю, но перед тем как писать в этот пост проглядел посты и ФАКи и не нашел однозначных ответов, сплошная каша и мешанина.

Так-же сегодня проводил эксперемент две базы у хостера и на локале под денвером, одинаковые настройки
в одной Ш пишет, а в другой нет.
Копирую из той которая не пишет в ту которая пишет, Ш заменяется квадратом. Вручную преребиваю имя альбома и все ОК.
Делаю то=же на локале под Дневером фиг там, как был квадрат, так и остался :-(

SHOW VARIABLES LIKE 'character%
Variable_name  Value 
character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8

Для обоих баз.
Базы не конвертированные, а ставились нуля :-(


Title: Re: Кодировка - в конец запутался
Post by: Makc666 on April 14, 2008, 07:08:16 pm
Вы не все переменные привели.
Не хватает:
Code: [Select]
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci

Попробуйте так.

Удалите базу галереи.

Создайте новую базу СРАЗУ с сравнением utf8_general_ci

Выполните для данной базы запрос:
SHOW VARIABLES LIKE 'character%

Переменные должны выглядеть вот так:
Code: [Select]
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/local/share/mysql/charsets/
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci

Уже после этого устанавливайте галерею в эту созданную вручную базу...
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 14, 2008, 08:15:01 pm
Сколько раз я уж так делал......
Да, что-же за ботва такая, остальные скрипты нормальн себя ведут, а CPG всю кровушку испил  ;D

Не выберая базы
character_set_client utf8   
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8

Выбрав БД CPG
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

Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 14, 2008, 08:21:16 pm
1. Удалил 
2. Создал со сравнением utf8_general_ci

SHOW VARIABLES для базы

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
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server cp1251_general_ci
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 14, 2008, 09:20:40 pm
Изыскания: 

Для Денвера правим my.cnf
default-character-set = utf8 (было cp1251)
default-character-set = utf8 (было cp1251)
init-connect = "set names utf8" (было cp1251)

Решило проблему, т.е. получил:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci

В имеющейся базе полный хаос
При перебивке имени альбома, отображается везде (CPG/phpMyAdmin) по русски нормально
Ш отображается нормально

Теперь то, чего я не понял и внимание вопрос
1. при описаном случае используя charsetmgr.php, что во что конвертить, т.к. при всех вариантах кракозябры.
2. у хостера мне некто не разрешит изгалятся, что делать?
3. что делать с остальными базами, ведь весь мир не только CPG, т.е. я к тому что это не вариант
4. как создать/конвертировать базу в UTF8 имея доступ лишь phpMyAdmin

Извините за занудство, но просто хочется для себя, а может и для других все разложить по полочкам


В phpMyAdmin при добавлении
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on April 14, 2008, 11:04:34 pm
1. Удалил
2. Создал со сравнением utf8_general_ci 

SHOW VARIABLES для базы 

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
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server cp1251_general_ci

Прочитайте тему Кодировка в MySQL 4.1.* и MySQL 5.* (http://forum.coppermine-gallery.net/index.php/topic,49624.0.html) ЕЩЁ РАЗ повнимательнее!!!

Особенно второе сообщение:
http://forum.coppermine-gallery.net/index.php/topic,49624.msg238431.html#msg238431

Там есть ответ на данное ваше сообщение выше...

Изыскания:

Для Денвера правим my.cnf
default-character-set = utf8 (было cp1251)
default-character-set = utf8 (было cp1251)
init-connect = "set names utf8" (было cp1251)

Решило проблему, т.е. получил:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci

После этого Вам нужно:


В имеющейся базе полный хаос
При перебивке имени альбома, отображается везде (CPG/phpMyAdmin) по русски нормально
Ш отображается нормально
А что Вы хотели, чтобы там наступил порядок? :)
До ваших изменений в my.cnf как раз был полный хаос с записью в базу данных.
А вот теперь они пишутся правильно, но т.к. ваша база данных уже была создана с кодировкой cp1251, Вам нужно её удалить и пересоздать заново, как описано выше, - это наилучший вариант для Вас, т.к. я понимаю, что галерея у Вас свежая.

Теперь то, чего я не понял и внимание вопрос
1. при описаном случае используя charsetmgr.php, что во что конвертить, т.к. при всех вариантах кракозябры.
2. у хостера мне некто не разрешит изгалятся, что делать?
3. что делать с остальными базами, ведь весь мир не только CPG, т.е. я к тому что это не вариант
4. как создать/конвертировать базу в UTF8 имея доступ лишь phpMyAdmin

Извините за занудство, но просто хочется для себя, а может и для других все разложить по полочкам
1. charsetmgr.php Вам в исходном варианте тут никак не поможет.

2. Читайте ответ в первом абзаце данного поста, а точнее ответ по ссылке:
http://forum.coppermine-gallery.net/index.php/topic,49624.msg238431.html#msg238431

3. Не совсем понятно, где делать? У хостера или там, где Вы меняли, my.cnf.
У хостера ничего видно не делать. Там где меняли my.cnf - тут без деталей я Вам не буду "городить" ответ, т.к. он может Вас ещё сильнее запутать. Только учтите, что если Вы изменили my.cnf и при этом не конвертировали базы, то у Вас сейчас старая часть базы в одной кодировке, а новая часть пишется в другой кодировке - потом может быть очень плохо из-за этого.

4. Если честно, то никак. Нужно сливать базу через phpMyAdmin. Заливать на сервер с шелом. "Конвертировать" (преобразовавывать) через командную строку на сервере, где есть доступ к шелу (это наилучший вариант). И потом заливать в "правильную" базу через phpMyAdmin обратно.

В phpMyAdmin при добавлении
Что то Вы видно тут недописали :)
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 15, 2008, 08:13:19 am
Подвожу итог того, что я понял.

Для новой базы
Если есть возможность править у хостера
Quote
cd /usr/ports/databases/mysql50-server/
make WITH_CHARSET=utf8 WITH_COLLATION=utf8_general_ci
make install


Если база раскорячена, т.е. "Переменная character_set_database не совпадает с другими переменными character_set_*,"
тогда нужно применять "патч" для файла
../include/functions.inc.php

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

Так?

Не понял Вашей фразы:
Quote
ИЛИ
вы конвертируете все таблицы и возможно данные в кодировку UTF (но это зависит от того, находятся ли данные уже в UTF или нет).
Второй метод самый лучший, но в нём от вас требуется, чтобы вы знали, в какой кодировке хранятся данные, а затем вы выполнили конвертацию с изменением или без изменения данных.

Code: [Select]
4. Если честно, то никак. Нужно сливать базу через phpMyAdmin. Заливать на сервер с шелом. "Конвертировать" (преобразовавывать) через командную строку на сервере, где есть доступ к шелу (это наилучший вариант). И потом заливать в "правильную" базу через phpMyAdmin обратно.
Можно поподробней?
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on April 15, 2008, 10:44:50 am
Подвожу итог того, что я понял.
 
Для новой базы
Если есть возможность править у хостера
Если база раскорячена, т.е. "Переменная character_set_database не совпадает с другими переменными character_set_*,"
тогда нужно применять "патч" для файла
../include/functions.inc.php

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

Так?
Нет, не так.
Вам нужно почитать в документации к MySQL разницу между 4.0 и 4.1.
http://dev.mysql.com/doc/refman/4.1/en/charset-upgrading.html
Quote
It is important to note that the “MySQL 4.0 character set” contains both character set and collation information in one single entity. Beginning in MySQL 4.1, character sets and collations are separate entities. Though each collation corresponds to a particular character set, the two are not bundled together.
+
MySQL 5.0 Reference Manual :: 9 Internationalization and Localization :: 9.1 Character Set Support (http://dev.mysql.com/doc/refman/5.0/en/charset.html)
http://dev.mysql.com/doc/refman/5.0/en/charset.html

Мне очень трудно это Вам объяснить своими словами, т.к. я боюсь, что Вы меня не поймете.
Если подключение происходит с одной кодировкой, а база данных в другой кодировке, то скрипт должен говорить базе данных, что он записывает данных в базу в той самой другой кодировке.
По умолчанию, галерея производит запись в базу данных, грубо говоря, в кодировке подключения.
Применяя патч, мы заставляем галерею производить запись в базу данных в нужной нам кодировке.

Не понял Вашей фразы:
Quote
4. Если честно, то никак. Нужно сливать базу через phpMyAdmin. Заливать на сервер с шелом. "Конвертировать" (преобразовавывать) через командную строку на сервере, где есть доступ к шелу (это наилучший вариант). И потом заливать в "правильную" базу через phpMyAdmin обратно.

Можно поподробней?
Т.к. кодировки были напутаны, то порядок такой:

1. Вы делаете обычный экспорт (т.е. ничего не меняя в его настройках) через phpMyAdmin в формате SQL (original.sql)
2. Заливает файл на хост с шелом
3. Выполняете команды
================================================
(с) Makc666

В первом окне консоли:

mysql -u root -p

DROP DATABASE `test1`;
DROP DATABASE `test2`;

CREATE DATABASE `test1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `test2` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

use test2;

set names utf8; source /dumps/original.sql;

Во втором окне консоли:

mysqldump -u root -p --create-options --compatible=mysql40 --default-character-set=cp1251 test2 > /dumps/dump.sql

В первом окне консоли:

use test1;

set names cp1251; source /dumps/dump.sql;

Во втором окне консоли:

mysqldump -u root -p --create-options --default-character-set=cp1251 test1 > /dumps/newbase.sql

(с) Makc666
================================================
4. Получаете файл newbase.sql, который можно заливать куда угодно через phpMyAdmin.
Только нужно помнить, что базу нужно создать заранее с нужным сопоставлением.

P.S.
Всё выше перечисленно выполняется при условии:
Code: [Select]
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 15, 2008, 11:57:46 am
Quote
Если подключение происходит с одной кодировкой, а база данных в другой кодировке, то скрипт должен говорить базе данных, что он записывает данных в базу в той самой другой кодировке.

Из примера ниже:
character_set_client utf8
character_set_connection utf8  - подключение
character_set_database cp1251  - база данных
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8

"скрипт должен говорить базе данных, что он записывает данных в базу в той самой другой (dbcharset) кодировке"
Code: [Select]
if ($CONFIG['dbcharset']) {
   mysql_query("SET NAMES '$CONFIG[dbcharset]'",$result);
  }

$CONFIG['dbcharset'] = "cp1251";

Теперь праильно?

т.е. БД UTF8, но хранит данные в cp1251?
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on April 15, 2008, 06:23:10 pm
Из примера ниже: 
character_set_client utf8
character_set_connection utf8  - подключение
character_set_database cp1251  - база данных
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8

"скрипт должен говорить базе данных, что он записывает данных в базу в той самой другой (dbcharset) кодировке"
Code: [Select]
if ($CONFIG['dbcharset']) {
   mysql_query("SET NAMES '$CONFIG[dbcharset]'",$result);
  }

$CONFIG['dbcharset'] = "cp1251";

Теперь праильно?
Если ставить с нуля, перед этим создав новую базу со сравнением cp1251_general_ci, то правильно.
Если не с нуля, то нужно сначала конвертировать базу, как я писал выше.

т.е. БД UTF8, но хранит данные в cp1251?
Я не совсем понимаю Ваш вопрос.
База данных хранится в cp1251 и подключение будет производиться по cp1251.
А UTF8 - это "кодировка" MySQL сервера по умолчанию.
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 15, 2008, 11:13:30 pm
Не фига, не Ваша правда

Далее не вопрос, а констатация фактов, а возможно и руководство к действию

Все по порядку SbS

Show Variable
character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
collation_connection utf8_general_ci
collation_database cp1251_general_ci
collation_server cp1251_general_ci

Создаю базу со сравнением UTF8_general_ci
отработался запрос CREATE DATABASE `coper` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Show Variable для "coper"
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
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server cp1251_general_ci

Добавляю в галерее русскими буквами альбом/названия файлов

В phpMyAdmin кракозабры, в галерее Ш показывает

патчу functions.inc.php

Поставил $CONFIG['dbcharset'] = "cp1251";
В галерее все по прежнему, Ш показывает, В phpMyAdmin кракозабры,
после пребивки русских слов без изменений

Поставил $CONFIG['dbcharset'] = "UTF8";
В галерее кракозябры "Шапочка ", в phpMyAdmin кракозабры,
Добавляю русский альбом/название файла - новое показывется правильно, в phpMyAdmin тоже ОК,
Перебиваю кракозабровое название первого альбома/файла - все Ок и в галерее и в phpMyAdmin

P.S. Перебивка аналогична конвертации
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on April 16, 2008, 10:08:03 pm
Не фига, не Ваша правда
Фига, не фига - это все от воспитания зависит.
Если вы нервничаете и злитесь, то обычно в такие моменты помогает прогулка по окрестности.

Далее не вопрос, а констатация фактов, а возможно и руководство к действию

Все по порядку SbS

Show Variable
character_set_client utf8   
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
collation_connection utf8_general_ci
collation_database cp1251_general_ci
collation_server cp1251_general_ci
Для ситуации выше нужна:
$CONFIG['dbcharset'] = "cp1251";

Создаю базу со сравнением UTF8_general_ci
отработался запрос CREATE DATABASE `coper` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Show Variable для "coper"
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
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server cp1251_general_ci
Для данной ситуации выше нужна:
$CONFIG['dbcharset'] = "utf8";

Добавляю в галерее русскими буквами альбом/названия файлов

В phpMyAdmin кракозабры, в галерее Ш показывает

патчу functions.inc.php

Поставил $CONFIG['dbcharset'] = "cp1251";
В галерее все по прежнему, Ш показывает, В phpMyAdmin кракозабры,
после пребивки русских слов без изменений
И правильно, что не будет работать.

Вы что не видите, что во втором случае у Вас переменная:
character_set_database utf8
вообще-то utf8 равна, а не cp1251.

В вашем сообщении, как и во всей теме:
...
character_set_database cp1251
...
речь вообще-то идёт о cp1251, а не о UTF8

Поставил $CONFIG['dbcharset'] = "UTF8";
В галерее кракозябры "Шапочка ", в phpMyAdmin кракозабры,
Добавляю русский альбом/название файла - новое показывется правильно, в phpMyAdmin тоже ОК,
Перебиваю кракозабровое название первого альбома/файла - все Ок и в галерее и в phpMyAdmin
И правильно кракозябры, потому что база у вас до этого писалась неправильно, если Вы всё точно описали.

P.S. Перебивка аналогична конвертации
Если Вы говорите о ручной перебивке, то конечно, Вы можете перебивать все поля столько, сколько вашей душе угодно.
Title: Re: Кодировка - в конец запутался
Post by: bubastic on April 17, 2008, 07:22:16 am
Quote
Фига, не фига - это все от воспитания зависит.
Если вы нервничаете и злитесь, то обычно в такие моменты помогает прогулка по окрестности.

С чего Вы взяли, что я нервничаю, я просто описал процес поиска и решения моей проблемы, а вдруг кому сгодится.
А Вам в любом случае респект за правильные мысли и советы. Токась, Вы как-то объясняете, что простое в сложное превращается  ;D
 
Title: Re: Кодировка - в конец запутался
Post by: LeaX on January 18, 2009, 08:34:53 pm
Читала-читала. Чувствую - мозги уже дымятся  :o

У меня картина еще разнообразнее чем здесь - аж 3 кодировка
Quote
character_set_client     utf8
character_set_connection    utf8
character_set_database    latin1
character_set_filesystem    binary
character_set_results    utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/
collation_connection    utf8_unicode_ci
collation_database    latin1_swedish_ci
collation_server    latin1_swedish_ci

Почему три? Ведь здесь укзаны две? Да потому, что вообще-то я переношу готовую галерею, которая у меня выводится на прежнем месте в win-1521, база у нее в utf8 (я и экспортировала из старой базы ее в utf8 и открывается в новой базе она в utf8)

Старая pma у меня 2.11.9.1 (сервер 4.1.22-log), а новая 2.11.3 (5.0.37-standard)
На старом месте у меня кстати тоже была MySQL-кодировка:  UTF-8 Unicode (utf8)
А Сопоставление соединения с MySQL: utf-8_unicode_ci
При этом сравнение в таблицах - cp1251_general_ci

У меня такой вопрос - верно ли будет в этом случае применить вот этот способ
http://forum.coppermine-gallery.net/index.php/topic,49624.msg238431.html#msg238431

И почему когда я вставляю в functions.inc.php этот код

Quote
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;
  }

У меня вылазит вот такая ошибка
Quote
Parse error: syntax error, unexpected T_INCLUDE in /home/admin/domains/lostjate.lgg.ru/public_html/gallery/include/functions.inc.php on line 3037
Title: Re: Êîäèðîâêà - â êîíåö çàïóòàëñÿ
Post by: LeaX on January 19, 2009, 08:13:09 am
Откуда у меня эта кодировка latin1 взялась вообще не пойму. На старом месте cp1251  :P
Title: Re: Êîäèðîâêà - â êîíåö çàïóòàëñÿ
Post by: LeaX on January 19, 2009, 08:44:19 am
Даа, вот что на старом месте... откуда эти латины взялись? Экпортировала базу в utf8
Quote
character_set_client     utf8
character_set_connection    utf8
character_set_database    cp1251
character_set_results    utf8
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/local/share/mysql/charsets/
collation_connection    utf8_unicode_ci
collation_database    cp1251_general_ci
collation_server    cp1251_general_ci
Title: Re: Êîäèðîâêà - â êîíåö çàïóòàëñÿ
Post by: LeaX on January 19, 2009, 08:49:43 am
М-даа, проверила - это у меня оказывается на новом сервере такая вот ерунда.
На старом была cp1251, а на новом этот латин
 ??? не пойму что мне делать. Латин мне не нужен, потому что это же выходит не русская кодировка?  ???
А мне нужна русская. Хоть какая-нибудь
Title: Re: Êîäèðîâêà - â êîíåö çàïóòàëñÿ
Post by: Makc666 on January 19, 2009, 03:51:38 pm
М-даа, проверила - это у меня оказывается на новом сервере такая вот ерунда.
На старом была cp1251, а на новом этот латин
 ??? не пойму что мне делать. Латин мне не нужен, потому что это же выходит не русская кодировка?  ???
А мне нужна русская. Хоть какая-нибудь
Создайте базу новую в cp1251, после чего уже импортируйте в неё вашу старую базу.
Title: Re: Кодировка - в конец запутался
Post by: LeaX on January 19, 2009, 08:53:58 pm
Мммм, легко сказать. У меня на VPS стоит Direct Admin (кстати оказалась очень похожа на простую админку эта штука)
Так вот - там для создания pma тупо пишешь ее название и пароль... и хлоп. Есть у тебя новая pma  :P
Удобно так... но вот выбора кодировки я там не заметила.

Изнутри можно уже как-то поменять latin1 на cp1251?
Title: Re: Кодировка - в конец запутался
Post by: GeXu3 on January 20, 2009, 02:05:07 am
для начала не помешало бы в файловую систему сетвера поставить свой 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...

Отакие помидоры :)
Title: Re: Кодировка - в конец запутался
Post by: GeXu3 on January 20, 2009, 02:16:42 am
да, чуть не зыбал.
utf8 это utf8
1251 может зваццо win1251, cp1251, 1251
latin1 же может зваццо latin1, а может 1252
Причем че характерно - если 1251 дамп лить как latin1 (на файле, сохранённом в 1251 поставить кодировку при импорте latin1), то затянет неправильно, хотя кодовые страницы, по сути, одинаковые.

Ну и выходит сто для LeaX самый он вариант, мож и дубовый, но зато сработает:
1. Придумать в какой кодировке она хочет базу
2. Сделать дамп базы данных как я писал выше, но сейвить не в utf8, а в той кодировке что она выберет.
3. Если не заработает сразу - поставить патч что на предыдущей странице она сама и написала, только SET NAMES 'выбраная_тобой_кодировка_названием'.
С вероятностью 99% заработает и проблем не возникнет.
Title: Re: Кодировка - в конец запутался
Post by: LeaX on January 20, 2009, 07:31:56 am
Quote
Отакие помидоры
:P точно
GeXu3 все-то у вас вечно как-то заковыристо.
Я начала с того, что пнула хостера - мол какого ... вы тут с кодировками балуетесь?
Не знаю что выйдет  :D
Quote
1251 может зваццо win1251, cp1251, 1251
это все разные?   :-X тихий ужас. Понятия не имею, какая мне нужна. Вроде бы cp1251
(судя по пред. странице character_set_database    cp1251)
Title: Re: Кодировка - в конец запутался
Post by: GeXu3 on January 20, 2009, 12:32:02 pm
Ну дело в том что у меня простые проблемы не возникают :) Зачастую валюсь на таком, что не имеет очень простых решений. А способ переноса действительно универсальный. Дело в том что при таком переносе как я написал дамп становится на сервер в той кодировке, на которую настроена база данных и становиццо на удивление правильно :)
Title: Re: Кодировка - в конец запутался
Post by: LeaX on January 20, 2009, 02:06:56 pm
Ураа, мой способ быстрее сработал  :D  :D  :D - кодировку изменили. 
Правда теперь придется блин перезалить все 3 базы - сайта, форума и галереи  :P потому что только в пустых новых теперь вот так как надо, а в старых вообще кишмиш... мышь-кышь  :-\
Зато стало хоть понятнее, что теперь делать - тупо заливать по-новой и чуть подправить пути.
Title: Re: Кодировка - в конец запутался
Post by: GeXu3 on January 21, 2009, 02:17:43 am
Но самое обидное, что всё это мона было сделать даже не пиная админов... :D
Title: Re: Кодировка - в конец запутался
Post by: Beer on March 23, 2009, 10:53:51 am
 Не могу сконнектить 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

Кто бы направил ход моей мысли? Не сильно я в этом рублю однако....
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on March 23, 2009, 02:51:46 pm
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. Найти код:
Code: [Select]
// 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. Заменить на:
Code: [Select]
// 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);
}


Title: Re: Кодировка - в конец запутался
Post by: Beer on March 24, 2009, 07:46:31 pm
Да, спасибо Makc666 - на Денвере заработало все классно!
Причем в ../include/functions.inc.php я патч не вписал  ???, на сайте не могу проверить - инет страшно тормозит.
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on March 24, 2009, 10:22:01 pm
Причем в ../include/functions.inc.php я патч не вписал  ???, на сайте не могу проверить - инет страшно тормозит.
Это может повлечь за собой некорректное внесение записей в базу данных, что затруднит дальнейшую работу.
Title: Re: Кодировка - в конец запутался
Post by: Beer on March 24, 2009, 10:31:47 pm

../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 - ���� :'(
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on March 25, 2009, 09:28:10 am
Чота не получается его вписать у меня - ошибка на строке diff -crbBN include/functions.inc.php include/functions.inc.php....
Может сам файл дашь поглядеть?
1. Открыть файл:
functions.inc.php

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

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


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

Всё просто :)
Title: Re: Кодировка - в конец запутался
Post by: Beer on March 25, 2009, 09:55:04 am
 Заработало - спасибо! Только интеграция опять отвалилась :'( после восстановления БД на хосте. Чота у меня либо одно, либо другое работает, но ни как не вместе... ;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
Title: Re: Кодировка - в конец запутался
Post by: 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',

Включаю бридж - не могу войти в галерею.
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on March 25, 2009, 09:43:11 pm
Закачал на хост, удалил таблицы галереи из БД, проинсталлировал галеру на хосте в базу форума.
В smf10.inc.php прописал:
        require_once('../forum/SSI.php');
        $boardurl = 'http://www.сайт.ru/forum';
Стр. 56 'host' => $db_server ? $db_server : 'mysql4.имяхоста.ru',

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

Не совсем понял, но может имена cookies вы опять забыли сделать одинаковыми? :)
Title: Re: Кодировка - в конец запутался
Post by: Beer on March 25, 2009, 10:24:04 pm
 Поставил в галере куки как на форуме - SMFCookie406. При обращении к главной странице постоянно отсылает на форму ввода логина, после ввода логина - опять.... :(
 Вышел из форума, вошел и ... оказался в галерее залогиненным!  Но ведь на локале и с разными куками у меня работало... ???
 Makc666 - отдельное спасибо за плоды просвещения ... :) Пошел юзать дальше.
Title: Re: Кодировка - в конец запутался
Post by: Beer on March 26, 2009, 01:51:48 pm
 Сегодня не мог попасть в галерею, пока не вышел из форума, потом залогинился и попал редиректом в галерею, а не на форум.  ???
Т.е. кто будет регистрироваться и логиниться, все будут сначала попадать в галерею.
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on March 27, 2009, 11:32:07 am
Сегодня не мог попасть в галерею, пока не вышел из форума, потом залогинился и попал редиректом в галерею, а не на форум.  ???
Т.е. кто будет регистрироваться и логиниться, все будут сначала попадать в галерею.
В бридже всегда было настроено так, что откуда логинитесь, туда и возвращаетесь.
Title: Re: Кодировка - в конец запутался
Post by: Ozz99 on July 19, 2009, 01:13:52 am
SHOW VARIABLES LIKE 'character%

Как выполнять этот запрос для базы данных
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on July 24, 2009, 05:19:01 pm
Ozz99, используте, пожалуйста, Firefox или Opera на данном форуме.
Описано тут -> http://forum.coppermine-gallery.net/index.php/topic,37805.0.html

SHOW VARIABLES LIKE 'character%

Как выполнять этот запрос для базы данных

Установить phpMyAdmin (http://www.phpmyadmin.net/).
Title: Re: Кодировка - в конец запутался
Post by: dispen on August 02, 2009, 09:45:00 pm
Требуется срочная помощь... MySQL настроена на utf8. На "шоу вариаблес" отвечает:
Variable_name  Value 
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir C:\Program Files\MySQL\MySQL Server 5.0\share\char...

Ставлю cpg1.4.25 с нуля. Создаю базу ( сравнение и сопоставление utf8_general_ci ) и инсталю галерею. Затем захожу в конфиг и ввожу название русскими буквами. В базе данных это название отображается как Фотоклуб. Если в базе вписать вместо Фотоклуб название русскими буквами, то на сайте оно будет выглядеть знаками вопроса ( ? ? ? ? ? ? ? ? ? ?) В чем может быть проблемма?  (phpmyadmin 3.2.0.1, Firefox 3.5, IE7)
Title: Re: Кодировка - в конец запутался
Post by: dispen on August 04, 2009, 08:26:20 am
Прописал в my.ini 

Code: [Select]
[mysqld]
skip-character-set-client-handshake
default-character-set=utf8
init-connect='SET NAMES utf8'

Помогло, всё встало на свои места и везде ( и в базе, и на сайте) русский язык... ;D
Title: Re: Кодировка - в конец запутался
Post by: Makc666 on August 09, 2009, 09:21:26 pm
Прописал в my.ini 

Code: [Select]
[mysqld]
skip-character-set-client-handshake
default-character-set=utf8
init-connect='SET NAMES utf8'

Помогло, всё встало на свои места и везде ( и в базе, и на сайте) русский язык... ;D
Если Вы более внимательно почитаете тему:
http://forum.coppermine-gallery.net/index.php/topic,49624.0.html
, то увидите, что там привидены ещё три переменные:
Code: [Select]
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci
, которые в вашем сообщении, на одно выше, отсутствуют.

То, что Вы сделали в my.ini - это фактически тоже самое, что наложение патча.

Судя по всему, где-то у Вас не utf8 по умолчанию.