100napb Posted August 21, 2018 Share Posted August 21, 2018 (edited) Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Spoiler Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Edited August 21, 2018 by 100napb 9 Link to comment Share on other sites More sharing options... 100napb Posted August 21, 2018 Author Share Posted August 21, 2018 (edited) не удержался, обновил кодировки в таблице oc_order_history. Теперь отправляю красивые письма клиентам )) Вот так в истории заказов: Spoiler А вот так у получателя: Spoiler Edited August 21, 2018 by 100napb Link to comment Share on other sites More sharing options... 1 month later... bratok1988 Posted October 18, 2018 Share Posted October 18, 2018 В 21.08.2018 в 16:25, 100napb сказал: Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. А у меня парадокс получился )) На первом сайте (дефолтный шаблон стоит) Второй и третий пункт сделал как у вас. И все ок) А на втором (другой шаблон) пошли крякозяблики. Проторчал пол дня, что я только не менял. В итоге вернул резервные файлы. И начал по порядку. Так вот на пункте 2 закончил и все работает. Спасибо Вам за решение со смайликами)) Link to comment Share on other sites More sharing options... 8 months later... krluch Posted July 18, 2019 Share Posted July 18, 2019 (edited) Супер! То, что доктор прописал Emoji нельзя использовать при вставке через модификатор. Если у кого способ решения? Edited July 18, 2019 by krluch Link to comment Share on other sites More sharing options... krluch Posted July 19, 2019 Share Posted July 19, 2019 В 18.07.2019 в 14:50, krluch сказал: Супер! То, что доктор прописал Нихрена не супер сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке @100napb вы не сталкивались с такой проблемой? Может есть рецепт как запустить сайт с emoji? Link to comment Share on other sites More sharing options... 100napb Posted July 19, 2019 Author Share Posted July 19, 2019 34 minutes ago, krluch said: сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке Без логов и указаний на конкретные ошибки, которые являлись причиной падения сайта и отката с бэкапов, сложно дать однозначные, конкретные ответы. 43 minutes ago, krluch said: Может есть рецепт как запустить сайт с emoji? что Вы имеете ввиду? у меня, например, есть проект, на котором эмодзи могут содержаться в отзывах клиентов, описаниях продуктов\статьях и в комментариях к заказам (отправяляются на почту клиентам). Исправно работает больше года по рецепту, которым делился выше. Если нужна помощь, а не совет, то пишите в ЛС. Link to comment Share on other sites More sharing options... krluch Posted July 26, 2019 Share Posted July 26, 2019 На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Link to comment Share on other sites More sharing options... johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options... 4 weeks later... 100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax × Existing user? Sign In Sign Up Shopping section Back Purchased extensions Invoices Whishlist Alternative Contacts Forums News ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
100napb Posted August 21, 2018 Author Share Posted August 21, 2018 (edited) не удержался, обновил кодировки в таблице oc_order_history. Теперь отправляю красивые письма клиентам )) Вот так в истории заказов: Spoiler А вот так у получателя: Spoiler Edited August 21, 2018 by 100napb Link to comment Share on other sites More sharing options... 1 month later... bratok1988 Posted October 18, 2018 Share Posted October 18, 2018 В 21.08.2018 в 16:25, 100napb сказал: Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. А у меня парадокс получился )) На первом сайте (дефолтный шаблон стоит) Второй и третий пункт сделал как у вас. И все ок) А на втором (другой шаблон) пошли крякозяблики. Проторчал пол дня, что я только не менял. В итоге вернул резервные файлы. И начал по порядку. Так вот на пункте 2 закончил и все работает. Спасибо Вам за решение со смайликами)) Link to comment Share on other sites More sharing options... 8 months later... krluch Posted July 18, 2019 Share Posted July 18, 2019 (edited) Супер! То, что доктор прописал Emoji нельзя использовать при вставке через модификатор. Если у кого способ решения? Edited July 18, 2019 by krluch Link to comment Share on other sites More sharing options... krluch Posted July 19, 2019 Share Posted July 19, 2019 В 18.07.2019 в 14:50, krluch сказал: Супер! То, что доктор прописал Нихрена не супер сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке @100napb вы не сталкивались с такой проблемой? Может есть рецепт как запустить сайт с emoji? Link to comment Share on other sites More sharing options... 100napb Posted July 19, 2019 Author Share Posted July 19, 2019 34 minutes ago, krluch said: сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке Без логов и указаний на конкретные ошибки, которые являлись причиной падения сайта и отката с бэкапов, сложно дать однозначные, конкретные ответы. 43 minutes ago, krluch said: Может есть рецепт как запустить сайт с emoji? что Вы имеете ввиду? у меня, например, есть проект, на котором эмодзи могут содержаться в отзывах клиентов, описаниях продуктов\статьях и в комментариях к заказам (отправяляются на почту клиентам). Исправно работает больше года по рецепту, которым делился выше. Если нужна помощь, а не совет, то пишите в ЛС. Link to comment Share on other sites More sharing options... krluch Posted July 26, 2019 Share Posted July 26, 2019 На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Link to comment Share on other sites More sharing options... johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options... 4 weeks later... 100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax × Existing user? Sign In Sign Up Shopping section Back Purchased extensions Invoices Whishlist Alternative Contacts Forums News ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
bratok1988 Posted October 18, 2018 Share Posted October 18, 2018 В 21.08.2018 в 16:25, 100napb сказал: Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. А у меня парадокс получился )) На первом сайте (дефолтный шаблон стоит) Второй и третий пункт сделал как у вас. И все ок) А на втором (другой шаблон) пошли крякозяблики. Проторчал пол дня, что я только не менял. В итоге вернул резервные файлы. И начал по порядку. Так вот на пункте 2 закончил и все работает. Спасибо Вам за решение со смайликами)) Link to comment Share on other sites More sharing options...
krluch Posted July 18, 2019 Share Posted July 18, 2019 (edited) Супер! То, что доктор прописал Emoji нельзя использовать при вставке через модификатор. Если у кого способ решения? Edited July 18, 2019 by krluch Link to comment Share on other sites More sharing options... krluch Posted July 19, 2019 Share Posted July 19, 2019 В 18.07.2019 в 14:50, krluch сказал: Супер! То, что доктор прописал Нихрена не супер сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке @100napb вы не сталкивались с такой проблемой? Может есть рецепт как запустить сайт с emoji? Link to comment Share on other sites More sharing options... 100napb Posted July 19, 2019 Author Share Posted July 19, 2019 34 minutes ago, krluch said: сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке Без логов и указаний на конкретные ошибки, которые являлись причиной падения сайта и отката с бэкапов, сложно дать однозначные, конкретные ответы. 43 minutes ago, krluch said: Может есть рецепт как запустить сайт с emoji? что Вы имеете ввиду? у меня, например, есть проект, на котором эмодзи могут содержаться в отзывах клиентов, описаниях продуктов\статьях и в комментариях к заказам (отправяляются на почту клиентам). Исправно работает больше года по рецепту, которым делился выше. Если нужна помощь, а не совет, то пишите в ЛС. Link to comment Share on other sites More sharing options... krluch Posted July 26, 2019 Share Posted July 26, 2019 На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Link to comment Share on other sites More sharing options... johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options... 4 weeks later... 100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax × Existing user? Sign In Sign Up Shopping section Back Purchased extensions Invoices Whishlist Alternative Contacts Forums News ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
krluch Posted July 19, 2019 Share Posted July 19, 2019 В 18.07.2019 в 14:50, krluch сказал: Супер! То, что доктор прописал Нихрена не супер сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке @100napb вы не сталкивались с такой проблемой? Может есть рецепт как запустить сайт с emoji? Link to comment Share on other sites More sharing options... 100napb Posted July 19, 2019 Author Share Posted July 19, 2019 34 minutes ago, krluch said: сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке Без логов и указаний на конкретные ошибки, которые являлись причиной падения сайта и отката с бэкапов, сложно дать однозначные, конкретные ответы. 43 minutes ago, krluch said: Может есть рецепт как запустить сайт с emoji? что Вы имеете ввиду? у меня, например, есть проект, на котором эмодзи могут содержаться в отзывах клиентов, описаниях продуктов\статьях и в комментариях к заказам (отправяляются на почту клиентам). Исправно работает больше года по рецепту, которым делился выше. Если нужна помощь, а не совет, то пишите в ЛС. Link to comment Share on other sites More sharing options... krluch Posted July 26, 2019 Share Posted July 26, 2019 На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Link to comment Share on other sites More sharing options... johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options... 4 weeks later... 100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax × Existing user? Sign In Sign Up Shopping section Back Purchased extensions Invoices Whishlist Alternative Contacts Forums News ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
100napb Posted July 19, 2019 Author Share Posted July 19, 2019 34 minutes ago, krluch said: сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке Без логов и указаний на конкретные ошибки, которые являлись причиной падения сайта и отката с бэкапов, сложно дать однозначные, конкретные ответы. 43 minutes ago, krluch said: Может есть рецепт как запустить сайт с emoji? что Вы имеете ввиду? у меня, например, есть проект, на котором эмодзи могут содержаться в отзывах клиентов, описаниях продуктов\статьях и в комментариях к заказам (отправяляются на почту клиентам). Исправно работает больше года по рецепту, которым делился выше. Если нужна помощь, а не совет, то пишите в ЛС. Link to comment Share on other sites More sharing options... krluch Posted July 26, 2019 Share Posted July 26, 2019 На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Link to comment Share on other sites More sharing options... johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options... 4 weeks later... 100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax × Existing user? Sign In Sign Up Shopping section Back Purchased extensions Invoices Whishlist Alternative Contacts Forums News ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
krluch Posted July 26, 2019 Share Posted July 26, 2019 На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Link to comment Share on other sites More sharing options... johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options... 4 weeks later... 100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax × Existing user? Sign In Sign Up Shopping section Back Purchased extensions Invoices Whishlist Alternative Contacts Forums News ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
johngalt1 Posted July 29, 2019 Share Posted July 29, 2019 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Показать контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Тоже актуально. Link to comment Share on other sites More sharing options...
100napb Posted August 21, 2019 Author Share Posted August 21, 2019 19 minutes ago, smartcoder said: Сделали такой модуль, для редактора summernote без изменений в базе. звучит здорово. Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. ниже пару скринов с демо-сайта модуля Spoiler Link to comment Share on other sites More sharing options... Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options... 1 month later... storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options... krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php Покупателям Оплата дополнений физическими лицами Оплата дополнений юридическими лицами Политика возвратов Разработчикам Регламент размещения дополнений Регламент продаж и поддержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каталога дополнений Урегулирование споров по авторским правам Полезная информация Публичная оферта Политика возвратов Политика конфиденциальности Платежная политика Политика Передачи Персональных Данных Политика прозрачности Последние дополнения Char Counter - character count / text counter Opencart By kabantejay Fix modifier log overflow By kabantejay ImageScanner — Removing unused images in OpenCart By SergeTkach Найти и заменить! MultiReplacer By Sha Review Carousel By Parallax
Guest smartcoder Posted August 21, 2019 Share Posted August 21, 2019 16 минут назад, 100napb сказал: вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько. Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля. Link to comment Share on other sites More sharing options...
storer Posted October 7, 2019 Share Posted October 7, 2019 В 26.07.2019 в 17:19, krluch сказал: На ocStore лучше сразу для всех таблиц ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Всем привет. Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного) Link to comment Share on other sites More sharing options...
krluch Posted October 7, 2019 Share Posted October 7, 2019 1 час назад, storer сказал: Эти запрос к БД как-то могут убить контент У меня не навредило, но если сомневаешься - сделай бекап Link to comment Share on other sites More sharing options... 6 months later... maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options... 100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Opencart 2.x Opencart 2.x: Setting and optimization Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php
maksym41193 Posted April 17, 2020 Share Posted April 17, 2020 В 21.08.2018 в 16:25, 100napb сказал: Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? Link to comment Share on other sites More sharing options...
100napb Posted April 17, 2020 Author Share Posted April 17, 2020 4 hours ago, maksym41193 said: все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт? Link to comment Share on other sites More sharing options... 1 year later... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options... 100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3 Go to topic listing Similar Content Правки OpenCart By vlad4298, May 22 0 replies 138 views vlad4298 May 22 Подсказака - css в строке с html - правки... By wwizard, May 26 2 replies 93 views esculapra May 26 MySQL 8 1 2 By fjeka, March 9 25 replies 955 views fjeka March 15 Некоторые правки css - не могу разобраться By wwizard, May 9 4 replies 155 views wwizard May 9 Зробити правки на ocStore 3.0.3.7 шаблон ShowCase By Nina123, May 26 3 replies 300 views OGORODnik May 27 Recently Browsing 0 members No registered users viewing this page.
AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Добрый день, подскажите, пожалуйста, а как Вы решаете проблему с необходимым уменьшением размера поля VARCHAR 255? Дело в том, что после изменения кодировки таблицы целиком по-хорошему нужно уменьшить значение типа столбца VARCHAR до 249. Проблема в том, что я не нашел как-бы так найти допустим все столбики во всех таблицах типа VARCHAR 255 с кодировкой utf8mb4_unicode_ci и заменить значение для этого типа на 249, но как выполнить такой запрос я так и не нашел. Может у Вас есть какой-то вариант? Link to comment Share on other sites More sharing options...
100napb Posted July 21, 2021 Author Share Posted July 21, 2021 25 minutes ago, AlektroNik said: Может у Вас есть какой-то вариант? я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... 1 Link to comment Share on other sites More sharing options... AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options... 6 months later... alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 3
AlektroNik Posted July 21, 2021 Share Posted July 21, 2021 6 минут назад, 100napb сказал: я так понимаю, что речь идет об ошибке #1071 - Specified key was too long; max key length is 767 / 1000 bytes. в MySQL до 5.7 версии включительно это ограничение для InnoDB таблиц было 767 байт (1000байт для MyISAM ). Начиная с 5.7.7 вроде как лимит поднят до 3072байт. поскольку на кодирование utfmb8 нужно 4 байта, поле с типом varchar может включить либо 767/4 = 191 символ в кодировке utfmb8 на иннодб, либо 1000\4 = 250 на майисам... короче говоря, я бы обновился и не парился. если обновиться нельзя, то а) либо обрабатывал в ручном режиме подобные ошибки, предварительно проверяя, что таблица не содержит длинных значений в конвертируемых полях - иначе они "обрежутся" после того, как изменить им varchar(255) на что-то меньшее. В ряде случаев, вместо варчар возможно безболезненно использовать другой тип данных - тот же text б) есть еще вариант с ROW_FORMAT=DYNAMIC, но там потребуются правки конфигов демона бд, т.е. на шаред-хостинге не выйдет... Да, я именно об этом предупреждении. Ну математика немного не такая, вы забыли плюс 1 байт хранит длину строки. Т. е. в моем случае получается (249 + 1)*4=1000 В принципе ругается только на индексы (если опустить строки, где уже слишком длинные данные), но MariaDB без проблем меняет все кодировки. Смущает только то, что индексы обрезаются до 250 в любом случае. Значит, чисто теоретически, может быть ситуация, когда индекс выведет больше строк чем положено. Тип таблиц в большинстве случаев MyISAM. Менять бы не хотелось, наверное разрабам виднее какая таблица какого типа должна быть. Т. е. официальную структуру хотелось бы максимально оставить нетронутой. Поэтому сделал выбор в пользу точечного редактирования, но если бы можно было найти как-то автоматически все столбики с типами данных, которые превышают лимиты, это бы сильно ускорило и упростило процесс. Но я пока даже не смог найти команду которой просто можно вывести столбики определенного типа, допустим VARCHER. 1 Link to comment Share on other sites More sharing options...
alexstekk Posted February 9, 2022 Share Posted February 9, 2022 В 21.08.2018 в 16:25, 100napb сказал: Здравствуйте, уважаемые. Пропустим ту часть, в которой обсуждался бы вопрос откуда у Вас могут появиться всякие няшные смайлики. Скажу лишь, что лепить их направо и налево со всяких гаджетов любит каждый, в том числе, оставляя отзывы у Вас на сайте. Скрыть контент Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение: Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php, $this->connection->set_charset("utf8mb4"); Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат. Может кому пригодиться. Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать? Метод рабочий на OCStore 2.3, после 3 шага всё заработало. Спасибо огромное! 1 Link to comment Share on other sites More sharing options...
Recommended Posts