Ошибка "Illegal mix of collations" в db.log связанная с блогом Есть решение
Добрый день.
стали несколько раз в неделю появляться ошибки в db.log вида:
2020-05-23 17:39:40 91.187.169.9
Query Error 1267: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'like'
Query: SELECT blog_post.id, blog_post.blog_id, blog_post.contact_id, blog_post.contact_name, blog_post.datetime, blog_post.title, blog_post.status, IFNULL(blog_post.text_before_cut, blog_post.text) as 'text', blog_post.cut_link_label, blog_post.url, blog_post.comments_allowed, blog_post.meta_title, blog_post.album_id, blog_post.album_link_type, (CASE WHEN blog_post.text_before_cut IS NULL THEN 0 ELSE 1 END) as 'cutted'
FROM blog_post
WHERE `status` = 'published' AND `blog_id` = '1' AND (blog_post.title LIKE '%query?\'%' OR blog_post.text LIKE '%query?\'%')
ORDER BY blog_post.datetime DESC
LIMIT 0, 10
## wa-system/database/waModel.class.php(266)
#0 wa-system/database/waModel.class.php(366): waModel->run('SELECT blog_pos...')
#1 wa-system/database/waDbStatement.class.php(229): waModel->query('SELECT blog_pos...')
#2 wa-system/database/waModel.class.php(346): waDbStatement->query(Array)
#3 wa-apps/blog/lib/models/blogItem.model.php(247): waModel->query('SELECT blog_pos...', Array)
#4 wa-apps/blog/lib/actions/frontend/blogFrontend.action.php(94): blogItemModel->fetchSearchPage(1, 10)
#5 wa-system/controller/waViewAction.class.php(161): blogFrontendAction->execute()
#6 wa-apps/blog/lib/classes/blogViewAction.class.php(7): waViewAction->display(false)
#7 wa-system/controller/waViewController.class.php(86): blogViewAction->display()
#8 wa-system/controller/waDefaultViewController.class.php(48): waViewController->executeAction(Object(blogFrontendAction))
#9 wa-system/controller/waController.class.php(21): waDefaultViewController->execute()
#10 wa-system/controller/waViewController.class.php(46): waController->run(NULL)
#11 wa-system/controller/waFrontController.class.php(263): waViewController->run(NULL)
#12 wa-system/controller/waFrontController.class.php(190): waFrontController->runController(Object(waDefaultViewController), NULL)
#13 wa-apps/blog/lib/classes/blogFrontController.class.php(76): waFrontController->execute(NULL, 'frontend', '', false)
#14 wa-system/controller/waFrontController.class.php(84): blogFrontController->execute(NULL, 'frontend', '')
#15 wa-system/waSystem.class.php(941): waFrontController->dispatch()
#16 wa-system/waSystem.class.php(615): waSystem->dispatchFrontend('blog/')
#17 index.php(7): waSystem->dispatch()
#18 {main}
Подскажите с чем такое может быть связано?
Версия Webasyst 1.13.8.526
WSS 8.10.0.32
Версия PHP 7.2.30
Версия MySQL 10.2.31-MariaDB
3 ответа
Причины этого достаточно банальны. Решение тоже есть. В работе с Марией проверено.
Откройте в phpmyadmin таблицу blog_post, зайдите в операции, сделайте ей сравнение с кодировкой utf8mb4_general_ci (если у вас используются русский и/или англ языки без экзотики типа азиатских языков)
Затем откройте структуру данной таблицы и сделайте изменение кодировки сравнения для определенных полей как на скриншоте
В качестве справочной информации сообщу. Подобная ошибка 1267, если у вас есть Магазин, может возникать при попытках клиентов вводить в строку поиска товара, например, символа эмодзи. Там тоже можно всё решить небольшой коррекцией некоторых полей трех таблиц. Ну и попутно поддержка эмодзи (см. https://getemoji.com/) включится таким образом для скорректированных полей.
Штатный инструмент включения поддержки эмодзи сделает то же самое, но для всей базы, что далеко не всегда и не всем нужно. Это можно вручную сделать точечно только для нужных полей.
спасибо!
В качестве проверки с вышеупомянутого сайта можете скопировать и добавить символы эмодзи в строку поиска записей в блоге и проверить после конвертации полей будут ли появляться новые ошибки в db.log