ошибки в db.log
Добрый день!
Слишком часто стали появляться ошибки в логах db.log подобного вида:
Query Error 1267: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'like' Query: SELECT * FROM shop_search_word WHERE name LIKE '?????????'
Подскажите пожалуйста, что с этим делать? Установлены все последние версии.
8 ответов
Добрый день!
С первого взгляда похоже на......
Спасибо большое, попробую! Просто странно, не могут же люди в поиск эмодзи вводить..
во-первых в строку ввода можно что-нибудь скопипастить. Во-вторых, если windows, сочетание кнопок на клавиатуре Win+(точка) никто не отменял
да, такое бывает, но здесь судя по айпи почему-то боты яндекса что-то вводят в строку поиска, что дает такой результат..
Запросто могут. Всякое можно от них ожидать, но тут может быть и другое и вылезает это ваше всё в том числе при сохранении товаров при построении и перестроении поискового индекса, работа с которым в этой и ещё одной таблице ведется даже в том случае, если у вас включен простой поиск по сайту.
Даже точечная правка сравнения этой таблицы целиком и/или столбца name в utf8mb4_general_ci спасет от такой ошибки вне зависимости как такое туда попадает.
Оптимально конечно ещё бы надо проверить нет ли у вас в названиях и описаниях товаров эмодзи. Это и может быть источником такой записи в логах.
Благодарю! Включение эмодзи на всю таблицу не получилось, сайт почему-то завис при включении режима отладки, быстро ее отключила, сейчас попробую действительно только поле с названием вручную изменить.
И это оказались запросы ботов яндекса, вера в людей осталась ))
В ответ, Креативити, при всем уважении, скрипт закончиться с ошибкой, т.к. при добавлении эмоджи, в старой версии MySQL 5.6 к примеры, в части таблиц вылезем за максимальный размер ключа.
В этом то вся и проблема, люди все обновили, видят пункт "Включить поддержку Эмодзи", нажимают, он запускается, а потом заканчивается с ошибкой, и часть таблиц в Базе данных становятся в кодировке UTF8 а часть в новой UTF8mb4. Скрипт при ошибке за собой не прибирает, т.е. не возвращает в исходное положение таблицы, и по сему - получается при совместном использовании таблиц в разных кодировках, к примеру JOIN - всеми любимый, когда происходит объединение таблиц в разных сопоставлениях - появляется ошибка в БД.
Лучше обратитесь, напрямую ко мне - исправлю результат быстро и оптимизирую работу БД.
Перевод вашей ошибки: Неверное объединение сопоставлений (разные кодировки), пытаетесь сопоставить UTF8mb4 и UTF8
Да, профессионализм ответов - зашкаливает, а ничего что он пытается объединить таблицы разных кодировок. О чем я везде и писал, все таблицы Шопскрипта, храните в одинаковой кодировке, и настройка Базы Данных (сопоставление), аналогично должна быть в той же кодировке. Соответственно:
P.s. Как можно перекодировать таблицы быстро в UTF8
И соответственно в UTF8mb4, так