Розкрийте потенціал виняткового дизайну з WebGate

У цифровому світі, де перше враження вирішує все, WebGate виступає маяком креативності та інновацій. Підніміть вашу онлайн присутність на новий рівень завдяки нашим неперевершеним послугам дизайну інтерфейсу та користувацького досвіду веб-сайтів, які створені, щоб захопити вашу аудиторію та принести результати.

Наші послуги:

  • Лендінг Пейдж
  • Сайт-візитка
  • Багатосторінковий сайт
  • Редизайн
tire shop portfolio case translate services portfolio case
Share on Facebook Share on Facebook icon Share on Twitter Twitter share icon

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

Як поміняти кодування всіх таблиць у MySQL базі thumb

Зазвичай текст помилки має такий вигляд:

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

Вам також може сподобатися

Треба визначити, який шрифт зображений на малюнку?