Как поменять кодировку всех таблиц в MySQL базе

Обычно текст ошибки выглядит так:

Execution of a query to the database failed - Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation 'if'

Warning: Cannot modify header information - headers already sent by (output started at /sata1/home/users/foldername/www/sitename.com/manager/includes/header.inc.php:7) in /sata1/home/users/shenevmer/www/sitename.com/manager/includes/document.parser.class.inc.php on line 2732

« MODx Parse Error »

MODx encountered the following error while attempting to parse the requested resource:
« Execution of a query to the database failed - Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation 'if' »
      SQL: SELECT `db_she`.`modx_site_templates`.templatename as name, `db_she`.`modx_site_templates`.id, `db_she`.`modx_site_templates`.description, `db_she`.`modx_site_templates`.locked, if(isnull(`db_she`.`modx_categories`.category),'Без категории',`db_she`.`modx_categories`.category) as category FROM `db_she`.`modx_site_templates` left join `db_she`.`modx_categories` on `db_she`.`modx_site_templates`.category = `db_she`.`modx_categories`.id ORDER BY 5,1
      [Copy SQL to ClipBoard]
 
Parser timing
  MySQL: 0,0442 s (0 Requests)
  PHP: 1333655752,1659 s  
  Total: 1333655752,2100 s

Если зайдете в управление БД (к примеру MySQL), то проблему можно увидеть в таком виде:
сравнение в БД

Хотя у вас при установке задавалась в настройках кодировка utf8_general_ci

Как поменять кодировку всех таблиц в MySQL базе

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

Итак, MySQL сервер версии 5.0 и выше, умеет выполнить вот такой вот запрос:

 

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
  FROM `information_schema`.`TABLES` t
 WHERE 1
   AND t.`TABLE_SCHEMA` = 'db_name'
 ORDER BY 1
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'db_name'
ORDER BY 1

только заменяем db_name на имя вашей БД.

запрос в БД для смены кодировки

Нажимаем ОК

Полученный результат и будет тем скриптом который нам нужно еще раз скопировать в это окно и выполнить.

Мы получим что то вроде:

ALTER TABLE `db_she`.`modx_active_users` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `db_she`.`modx_categories` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `db_she`.`modx_documentgroup_names` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
....
....
ALTER TABLE `db_she `.`modx_document_groups` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `db_she`.`modx_event_log` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `db_she`.`modx_keyword_xref` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `db_she`.`modx_manager_log` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Выделяем этот код - вставляем в окно запросов к БД и нажимаем ОК.

В результате получем для всей Базы данных, параметр сравнения вместо latin1_swedish_ci -->  utf8_general_ci, и это будет выглядеть так:

Кодировка сравнения, после изменения

 

А так же, в MODx могут выдаваться ошибки: Cannot modify header information - headers already sent by. Проблема заключается в неверно заданном параметре сравнения вашей БД. К примеру при установке кодировка utf8_general_ci а если зайти в PHP MyAdmin - и зайдете в одну из таблиц, то увидите Сравнение: latin1_swedish_ci


Комментарии:

alex
Спасибо!
19/08/2013
Помогло! Благодарен за эту статью)
admin
19/08/2013
Пожалуйста!
Андрей
24/11/2018
СПАСИБО БОЛЬШОЕ!!!!
Алена
Спасибо огромное!
03/09/2013
Отличный совет! Спасибо большое!
Очень дельная и ценная информация!
23
admin
03/09/2013
Рад что помог!
35
Юрий
23/10/2013
Большое спасибо. Помогло...
19
admin
23/10/2013
Пожалуйста! Буду благодарен вам за лайки!!!
12
Sergey
01/10/2014
Огромное спасибо, помогло !!!! ;))
Иван
05/01/2016
Редко пишу отзывы, но тут оно того стоит, спасибо за помощь:) Пропали вопросики, ошибки, и в админке появилась возможность искать материалы на русском языке
admin
05/01/2016
Спасибо! Рад что пригодилось
Andrew
02/02/2016
Спасибо тебе мил человек. Перед этим опробовал три найденых в гугле метода - все фигня. Твой метод сработал на 100%.
Siarzhuk
Siarzhuk
15/02/2017
Глупый вопрос, но...
Как "Полученный результат..." скопировать? Строки обрезаются.
admin
15/02/2017
Там есть поле в интерфейсе phpMyAdmin по сколько символов отображать в строке или типа того, проблемы быть не должно. У меня щас под рукой нету "искревленной" базы что бы точно сказать

Другие записи

Лечим instal.db.sql

На db12 установлен сервер MySQL версии 5.5, которые больше не поддерживает ключевое слово TYPE, оно было заменено на ENGINE. Замените в файле

Свадебный фотограф Киев - Photowizard.com.ua

  Всегда хотел нарисовать дизайн связанный с творчеством да и собственно иметь такой сайт в портфолио