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