Web-Gate
где заказать сайт +38 (093) 209 60 74 где заказать сайт +1 (510) 491 89 19
Пн - Вс: 10 00 - 19 00
Профессиональное продвижение сайтов — поисковая оптимизация,
раскрутка сайта, разработка и создание сайта

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

Отзывы ()

Теги:

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

Рекомендуйте нас:

Склейка разных доменов в один


17.03.2016
Шпаргалка для себя самого. И так если понадобиться склеить два разных домена в один, полезные ссылки(ниже).

Notepad++ замена с регулярными выражениями


06.12.2015
Иногда лень заставляет разбираться в тех вещах, в которых раньше даже не хотелось копаться. Все таки легче пол часа час разобраться в автоматической замене с распознаванием регуларных выражений чем в ручную лопатить огромные текстовые файлы и заменять в ручную!!
Главная - Блог - Как поменять кодировку всех таблиц в MySQL базе
07.02.2012

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

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, и это будет выглядеть так:

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

 

Если не помогло, возможно вам будет полезны ссылка:
Cannot modify header information - headers already sent by

Отзывы (9)


alex 19 авг 2013 в 21:00 # Ответить
Спасибо!
Помогло! Благодарен за эту статью)
admin 20 авг 2013 в 00:48 # Ответить
Пожалуйста!
Алена 03 сен 2013 в 21:21 # Ответить
Спасибо огромное!
Отличный совет! Спасибо большое!
Очень дельная и ценная информация!
admin 03 сен 2013 в 21:30 # Ответить
Рад что помог!
Юрий 23 окт 2013 в 14:18 # Ответить
Большое спасибо. Помогло...
admin 23 окт 2013 в 18:25 # Ответить
Пожалуйста! Буду благодарен вам за лайки!!!
Sergey 01 окт 2014 в 20:35 # Ответить
Огромное спасибо, помогло !!!! ;))
Иван 05 янв 2016 в 08:56 # Ответить
Редко пишу отзывы, но тут оно того стоит, спасибо за помощь:) Пропали вопросики, ошибки, и в админке появилась возможность искать материалы на русском языке
admin 05 янв 2016 в 09:06 # Ответить
Спасибо! Рад что пригодилось

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