Дело в том, что при установки официальной версии 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 у вас не вызовет ни каких проблем.
Спасибо, пригодилось
Здравствуйте, спасибо за информацию! Она мне очень пригодилась