« Полезные адреса и Реквизиты ГАИ (МРЭО) для Красносельского района СПБ | Main | Вещи, которые окружали меня 2 года назад .... забавно »

Если мускул не в той кодировке какой надо ...

<strong>Кодировка</strong>

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

это делается SQL коммандой
SET NAMES кодировка
например:
SET NAMES cp1251

<strong>
Кодировка в MovableType (3.2)</strong>

в файле
lib/MT/ObjectDriver/DBI/mysql.pm

в функции INIT
прописать

$driver->{dbh}->do("SET NAMES cp1251");

<strong>Кодировка в WackoWiki и исправление ошибки</strong>

в файле mysql.php

$dblink = mysql_connect($host, $user, $passw);
mysql_select_db($db, $dblink);
mysql_query("set names cp1251", $dblink);

а также в файле wakka.php

Следует закомментировать строку 254
//$cache->Log(<Before Run wacko=".$wacko);


<strong>Кодировка в SMF</strong>


В файле install.php находим:
Код:

// Attempt a connection.
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);

Дописываем ниже строчку:
Код:

mysql_query("set names cp1251", $db_connection);
Далее находим строку:
Код:

$db_connection = @mysql_connect($db_server, $_POST['db_prefix'] . $db_user, $db_passwd);

Снова добавляем:
Код:

mysql_query("set names cp1251", $db_connection);
Сохраняем.

Открываем index.php, ищем строку
Код:

// Connect to the MySQL database.
Всё что после неё до следующей строки начинающейся с "//" заменяем на:
Код:

if (empty($db_persist))
{$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
mysql_query("set names cp1251", $db_connection);
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");}
else
{$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
mysql_query("set names cp1251", $db_connection);
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");}


Закрываем.

Точно такую же замену производим в SSI.php

Всё.

Да, естественно до вышеописанных замен было сделано следующее:

В файле install_1-1.sql заменены все строки:
Код:

) TYPE=MyISAM
на
Код:

) TYPE=MyISAM DEFAULT CHARSET=cp1251 DEFAULT COLLATE=cp1251_general_ci;
В файле \Sources\Errors.php после 2-й строки содержащей:
Код:

$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);

добавлено:
Код:

mysql_query( "set session character_set_client=cp1251;");
mysql_query( "sset session character_set_database=cp1251;");
mysql_query( "set session character_set_connection=cp1251;");
mysql_query( "set session character_set_results=cp1251;");
mysql_query( "set session character_set_client=cp1251;");


В файле \Themes\default\languages\index.english.php строка:
Код:

$txt['lang_character_set'] = 'ISO-8859-1';
заменена на:
Код:

$txt['lang_character_set'] = 'windows-1251';

Может конечно я наделал где то и лишнего, сначала уже экспериментировать лень честно говоря. Но так работает всё с учётом исправления ошибок упомянутых в других топиках по поводу битой кодировки.
Кому интересно, архив со всеми изменёнными файлами можно забрать здесь: http://www.radiodom.ck.ua/files/smf_1-1-2_cp1251.rar

Последовательность установки.
1. Заливаем на сервер файлы из архива smf_1-1-2_install.tar.gz
2. Поверх заливаем всё руссифицированное из smf_1-1-2_russian.tar.gz
3. И последнее из моего архива smf_1-1-2_cp1251.rar
Наслаждаемся.
GeoD:
У меня была аналогичная проблема (русский текст, взятый из базы данных, отображался знаками вопроса и смайликами как ??????????? ???? ?? ??). База у хостера была в кодировке UTF-8 (и изменить ее было нельзя), текст в нее был залит в кодировке cp1251 и читался в phpmyAdmin нормально, сопоставление и сравнение были установлены cp1251_general_ci. Но этого одного было мало.
В моем случае проблема исчезла после замен в файлах index.php и SSI.php по рекомендации Mavn - см. пост http://www.simplemachines.ru/index.php/topic,791.msg6900.html#msg6900
DjAndy:
В моём случае и в phpMyAdmin все таблицы были заполнены неверно, вопросики вместо текста.
GeoD:
Это значит, залил дамп не в той кодировке, что установлена для базы.
byte:
Ставлю СМФ, с русским win1251, в SQLфайле прописал везде TYPE=MyISAM DEFAULT CHARSET=cp1251 DEFAULT COLLATE=cp1251_general_ci; все равно часть русских букв "впросиками" отображается.


TrackBack

TrackBack URL для этой записи:
http://www.solotony.com/cgi-bin/blog/mt-tb.cgi/91

Powered by
Movable Type 3.2