среда, 7 декабря 2011 г.

Bitrix - ошибка кодировки в БД

В CMS Bitrix есть такая вещь, как проверка сайта http://site_name/bitrix/admin/site_checker.php?lang=ru и зайдя на сайт и выполнив проверку увидел ошибку "Кодировки таблиц в БД". Изначально ошибка была в кодировке соединения.

В первую очередь был выполнен запрос, для приведения БД (далее в качестве имени db_name) к нужному сравнению -

ALTER DATABASE `db_name` DEFAULT COLLATE utf8_unicode_ci;

Затем были изменены действия выполняемые после подключения к БД. Для этого файл /bitrix/php_interface/after_connect.php был приведён к следующему виду -

<?
$DB->Query('SET NAMES "utf8"');
$DB->Query('SET sql_mode=""');
$DB->Query('SET character_set_results=utf8');
$DB->Query('SET collation_connection = "utf8_unicode_ci"');
?>

И после всего этого надо было изменить сравнение всех таблиц БД к utf8_unicode_ci. Можно было конечно ручками, но проще выполнить два запроса -
Первый

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;') as sqlcode
  FROM `information_schema`.`TABLES` t
 WHERE 1
   AND t.`TABLE_SCHEMA` = 'db_name'
 ORDER BY 1
Который в качестве ответа выдает

ALTER TABLE `db_name`.`b_adv_banner_2_country` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE `db_name`.`b_adv_banner_2_day` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE `db_name`.`b_adv_banner_2_group` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE `db_name`.`b_adv_banner_2_page` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
....
....

Выполняем получившийся запрос.


После этого провёл "Проверку БД" http://site_name/bitrix/admin/repair_db.php?lang=ru и затем "Оптимизацию БД" http://site_name/bitrix/admin/repair_db.php?optimize_tables=Y&lang=ru

Проблема была устранена