Эмодзи только в карточке товара, как сделать?
Для добавления поддержки эмодзи не хочу запускать общую кнопку в настройках webasyst (ведь она сменит кодировку во многих не нужных мне таблицах), так как хочу сменить кодировку только у одной таблицы shop_product, а именно description, в ней хочу поменять utf8_general_ci на utf8mb4
Перед запуском в настройках базы данных вебасиста написано:
Для смены кодировки таблиц и полей в базе данных можно также использовать phpMyAdmin.
Вопрос: где в phpMyAdmin можно сменить кодировку у одной таблице с utf8_general_ci на utf8mb4? Ребят, подскажите пожалуйста - может есть какой sql запрос?
Мне нужны смайлы только в карточке товара, всё, больше нигде они мне не пригодятся, поэтому хочу поменять кодировку только у одной таблицы.
14 ответов
Перейти в нужную таблицу, вверху выбрать раздел Операции и поменять сравнение
Большое спасибо, нашёл!
Поменял кодировку только у одной таблицы shop_product, а именно у description, да, смайлы в товаре теперь отображаются и товар сохраняется, но при сохранении товара пишет:
1267. Query Error 1267: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'like' Query: SELECT id FROM shop_search_word WHERE name LIKE '?'
Подскажите пожалуйста, в какой таблице ещё нужно сменить кодировку на utf8mb4_general_ci, что-бы товар со смайлами сохранялся без ошибки?
---
Кстати. без смайлов товар сохраняется без ошибки.
Судя по тексту ошибки это shop_search_word.
shop_search_word уже пробовал менять, не меняется там кодировка в name, не вручную, не с общей кнопки запуска с бекенда (проверял на тесте эту кнопку - пока не вижу смысла её нажимать на основе и кодировать почти все таблицы).
просто в shop_search_word - меняется, но ошибка та же.
Смоделировал на тестовой установке вашу задачу. Меняется всё и через инструменты интерфейса phpmyadmin или запросом вида там же
После этого ошибка исчезает.
Чтобы изменить отдельно взятое поле, надо зайти в Структуру конкретной таблицы и изменять отдельное поле, а не всю таблицу через меню Операции, которые над таблицой целиком делаются. Стрелочками на скрине показано куда нажимать, чтобы изменить поле.
Ниже итог ручной конвертации двух полей двух разных таблиц, показанный в админке WA.
В итоге получилось, что для поддержки эмодзи только в описаниях товара меняем два поля двух таблиц в новую кодировку и все работает. На витрине смайлы и в админке в редакторе товара тоже. Ошибок нет.
Именно всё так и делал.
При sql запросе тоже ошибка
О каком ключе идёт речь?!
Постараюсь объяснить максимально просто.
У вас появляется эта ошибка потому что у вас старый MySQL с ограничением ключа для таблиц типа MyISAM в 1000 байт. В версиях старше 5.6 и вроде даже в последних 5.6.х каких-то длина увеличена до 3072 байт. Поле name является индексом (серый ключик) в этой таблице.
При переходе от utf8 (3 байта на символ) к utf8mb4 (4 байта) расчет на длину поля типа VARCHAR примерно следующий (там ещё несколько байт надо отнимать):
1000/3 = 333
1000/4 = 250, т.е. в вашем случае либо VARCHAR надо меньше 250 символов (скажем 240), либо версию MySQL менять на ту, где лимит 3072. Потому что 255*4=1020, а это больше 1000.
В идеале лучше MySQL поменять, чем ограничивать длину ключевых полей, но в рамках вашей задачи с эмодзи только в описании товара можно и ключ укоротить до 240, чтобы точно прокатило.
На скриншоте я показал свою попытку увеличить до 1000 длину VARCHAR. 1000*4 > 3072. Тоже есс-но ожидаемо поймал ошибку.
Если я уберу с поля name индекс, то мне станет доступна длина превышающая лимит, но поскольку индекс как бы важен, то лучше не убирать. Хотя, если у вас поиск не умный на сайте, а простой, то можно и дропнуть индекс по столбцу name. Тогда длина поля типа VARCHAR вас не побеспокоит и можете её оставить 255. См. скриншот ниже с примером 1200*4 > max3072
Иными словами вариантов как поступить у вас минимум три. Выбирать вам.
Гениально!!! Спасибо большое, так как у меня умный поиск, а обновлять версию MySQL я не раз ещё не пробовал, даже не знаю, где свою версию MySQL узнать и как её обновить - я просто урезал VARCHAR с 255 до 240 и всё получилось, сохраняется теперь без ошибок.
Если вы арендуете хостинг, то это достаточно просто делается в панели управления вашей площадкой для размещения проектов (сайтов). У разных компаний инструменты выглядят по-разному, но смысл примерно одинаковый. Выбираете подходящую вам версию из предлагаемых (обычно их несколько). Хостер делает замену ПО по сути в автоматическом режиме. Несколько минут ваш проект в процессе смены версии может быть недоступен. Возможно надо будет проделать ещё какие-то действия. В любом случае у хостера уточните детали и тонкости, а сам процесс достаточно простой. На одном из хостингов предлагается на выбор вот такой список комбинаций ПО. Для последних версий WA+SS и даже для некоторых плагинов рекомендуется выбирать из версий ПО более новое.
Спасибо. В настройках вебасиста смотрел, написано что у меня версия MySQL 5.7
Хостер сказал что не в версии MySQL дело, а в типе таблиц, у меня везде стоит MyISAM
shop_search_word поменял с MyISAM на InnoDB и VARCHAR на 255 обратно поставил и всё тоже сохраняет без ошибок.
Вот у меня такой вопрос возник, вот этот тип таблицы MyISAM фреймворк сам ставит при установке?
Я вообще думаю все таблицы поменять с MyISAM на InnoDB но может это плохо обернётся в дальнейшем, не знаю (мне кажется что InnoDB лучше чем MyISAM - а может я и не прав, может наоборот MyISAM лучше). Может при обновлении вебасиста снова будут изменяться типы таблиц на MyISAM ?
У меня все таблицы MyISAM, но лимит 3072. Впрочем хостеру видней что у них там в конкретном случае сконфигурировано и как скомпилировано. По крайней мере теперь вам примерно понятен процесс.
Вот тут про InnoDB написано (Гуглопереводчик в помощь) https://dev.mysql.com/doc/refm... и еще вот тут про MyISAM https://dev.mysql.com/doc/refm...
А MyISAM vs. InnoDB - это вообще отдельная большая тема. Для начала лучше почитать материалы на эту тему перед тем как конвертировать.
Типы таблиц при обновлении не меняются. Они задаются при создании таблиц базы в самом начале. Или меняются руками при необходимости потом.
Спасибо за помощь! Теперь более менее понятно что к чему.