Ошибка "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

1 ответ

  • 1
    replicant 25 мая 2020 11:40 # Решение

    Причины этого достаточно банальны. Решение тоже есть. В работе с Марией проверено.

    Откройте в phpmyadmin таблицу blog_post, зайдите в операции, сделайте ей сравнение с кодировкой utf8mb4_general_ci (если у вас используются русский и/или англ языки без экзотики типа азиатских языков)

    Затем откройте структуру данной таблицы и сделайте изменение кодировки сравнения для определенных полей как на скриншоте

    В качестве справочной информации сообщу. Подобная ошибка 1267, если у вас есть Магазин, может возникать при попытках клиентов вводить в строку поиска товара, например, символа эмодзи. Там тоже можно всё решить небольшой коррекцией некоторых полей трех таблиц. Ну и попутно поддержка эмодзи (см. https://getemoji.com/) включится таким образом для скорректированных полей.

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

    • +1
      Антон Антон 25 мая 2020 11:46 #

      спасибо!

      • +1
        replicant replicant 25 мая 2020 11:55 #

        В качестве проверки с вышеупомянутого сайта можете скопировать и добавить символы эмодзи в строку поиска записей в блоге и проверить после конвертации полей будут ли появляться новые ошибки в db.log

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите