Конвертация базы форума IPB

Конвертация базы форума IPBДело в том, что при установки официальной версии IPB не спрашивается кодировка для базы. Из-за этого может случиться ситуация, когда база окажется с кодировкой cp1251 или latin1_swedish_ci. Вариантов масса. Из-за того, что кодировка не UTF-8 у вас на форуме не будет работать поиск по словам на русском языке.

Так что, если у вас не работает поиск по русским словам, то проверьте кодировку таблиц. Но что же делать, если проблема с кодировкой уже случилась? Вариант только один — конвертировать базу в UTF-8.

В статье будет рассмотрено два способа конвертации базы в UTF-8. Ознакомьтесь с ними и потом выбирайте какой-то для себя. Не забудьте сделать бекап базы перед тем, как начать конвертацию.

Вариант №1. Конвертация базы при помощи php скрипта.

Скрипт для конвертации базы IPB, который нашелся на просторах интернета. Автор встречался разный, а настоящего найти не удалось.

<?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

header('Content-type: text/plain');

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";

$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );

while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}

mysql_close($dbconn);
?>

Этот текст необходимо сохранить в файл superconvert.php (крутое название для файла можете придумать сами, только не забудьте, что расширение должно быть php). Положите файл в корень форума. Откройте в браузере ВАШ_САЙТ/superconvert.php и радуйтесь полученным результатам.

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


Вариант №2. Конвертация базы в UTF-8 (Лучший способ).

Начнем с того, что создадим бекап базы. Вдруг что случится, а он у вас будет. После этого создаем дамп используя mysqldump и некоторые параметры:

mysqldump -u user -p --default-character-set=latin1 --skip-set-charset dbname > dbname.sql

Теперь пройдемся по файлу и заменим все latin1 на utf8:

sed -r 's/latin1/utf8/g' dbname.sql > dbname_utf.sql

Удалите базу и создайте по новой с дефолтной кодировкой UTF-8:

mysql -u user -p --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"

Настала пара залить получившиеся данные в созданную таблицу

mysql -u user -p --default-character-set=utf8 dbname < dbname_utf.sql

Второй вариант дал положительный результат. Осталось только внести изменение в файл conf_global.php. Укажите кодировку utf8:

$INFO['sql_charset'] = 'utf8';

Форум отлично себя чувствует и поиск тоже работает без проблем. Теперь конвертирование кодировки базы данных из cp1251 в utf8 у вас не вызовет ни каких проблем.

3 комментария

  1. Уведомление: Аноним
  2. Здравствуйте, спасибо за информацию! Она мне очень пригодилась

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *