Владимир В. Болотин Литературный конкурс “ПС”


comment Нет комментариев 10.09.2006

Если Вы читаете эти строки, значит перенос сайтов удался. В связи с чем хочу поделиться кучей нового опыта, который я схлопотал сегодня.
Я закончил перенос всех своих ресурсов на новый сервер, главное отличие которого от старого - чуть более новый MySQL (4.1.X), лояльный к кодировке utf8. Работы по конвертации баз из чего-ни-попадя в нормальный utf8 производил администратор сервера, а я, в свою очередь, развлекался со всеми софтами, которые попали под перенос. Среди них:
WordPress 2.0.3, 2.0.4, Mantis Bug Tracking System 1.0.5, MovableType 3.2, MediaWiki 1.6.8 и osCommerce 2.2.

Собственно, все что я хотел рассказать - это то, что для работы скриптов с базами после переноса их в эти utf8-разумеющие версии MySQL, надо отчетливо где-то сказать: SET NAMES utf8. Или SET NAMES cp1251. Смотря что требуется. Самое интересное было выяснить, где это можно сказать.
(Далее везде я указываю кодировку utf8)

WordPress 2.0.3, как мы уже обсуждали раньше, поправляется легко и быстро:
Файлик /wp-includes/wp-db.php
после 57-й строки: $this->select($dbname);
нужно добавить: $this->query(”SET NAMES utf8″);

WordPress 2.0.4, по всей видимости, в таких глупостях уже не нуждается, т.к. последние два блога на 2.0.4 просто заработали после переноса и все. Но надо проверить.

Mantis Bug Tracking System 1.0.5:
Я попробовал несколько вариантов, описанных в форумах поддержки, и ни один из них не сработал. Поэтому пришлось придумать самому. Не уверен, что я сделал это корректно, но у меня все заработало:
Файлик /core/database_api.php
после 40-й строки: $t_result = $g_db->Connect($p_hostname, $p_username, $p_password, $p_database_name );
нужно добавить: $g_db->Execute( ‘SET NAMES utf8′ );

MediaWiki 1.6.8:
МедиаВики оказалась довольно сговорчивой софтинкой, и после изменения в файлике LocalSettings.php параметра $wgDBmysql5 = true; стала честно сообщать SET NAMES utf8 куда положено.

osCommerce:
В файлике /includes/functions/database.php
после строки if ($$link) mysql_select_db($database);
добавить: mysql_query(”SET NAMES utf8;”,$$link);

Самая свистопляска началась с MovableType 3.2. Сначала пришлось вникнуть в суть проблемы. В конце мучительного экскурса в анатомию МТ, я оказался перед распутьем. На распутье стоял камень. На нем было написано:
Налево пойдешь…

1.Wait for Unicode support for DBI/DBD::mysql which might be a long time since nobody is sure if it should be provided by the database-independent interface DBI or by the MySQL driver DBD::mysql or both together in some way.
2.Use decode_utf8 on every output from the database. This is not very easy to do.
3.Use a patch which blesses all database data (yes that includes the binary fields) as UTF-8 based on a flag you set when connecting to the database.

Первый вариант никуда не годился из-за временных ограничений, второй звучал устрашающе, особенно с учетом того, что я ничего не понимаю в перле, а после такой статьи, от ее автора слышать “This is not very easy to do” - вообще жутковато. Третий не годился из-за физической недоступности DBD::mysql для меня. И тут меня угораздило заглянуть под камень! =) А там надпись:

Changelog 3.32 (2006.08.28)
34025: UTF-8 data in blog_description table mangled when posting a comment
Fixed a bug for MySQL users which caused characters in the weblog description field to be mangled if `LaunchBackgroundTasks` is enabled and the database character encoding is something other than Latin-1 (i.e. where the character encoding must be converted between MySQL client and server and the SET NAMES database command is required). (Thanks to Julian ‘Julik’ Tarkhanov!)

Это, конечно, не было описанием моей проблемы. Но я читал “Код да Винчи”, и поэтому увидел магическую комбинацию знаков в тексте: …3.32…UTF-8…..MySQL….other than Latin-1….SET NAMES……..Julian ‘Julik’ Tarkhanov!
Концовка меня убедила окончательно, что решение найдено. Любой, кто также давно как и я пользуется MT, знает, что зачинщик движения за UTF-8 среди мувабл-тайпистов ни кто иной как Julik! Мы говорим utf8, подразумеваем Julik. Мы говорим Julik, и думаем про utf8. :) )) Ну тут я и решился. И проапгрейдил МТ набитый вопросиками до версии 3.32. И. ОН. СТАЛ. НОРМАЛЬНЫМ.
ВСЕ.

Понравилась статья - подпишись!

Просмотр статей

Статьи по теме:

Sorry, comments for this entry are closed at this time.

Об авторе: phil

Блог: blogger@work

Хочешь подписаться?

 Подписаться на RSS Или подпишись по email:
Укажи свой email:  
Найти :