0 Пользователей и 1 Гость просматривают эту тему.
  • 14 Ответов
  • 3156 Просмотров
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
UTF-8 Multibyte
« : 31.07.2016, 17:23:31 »
Здравствуйте,
В БД вижу уведомление "The Joomla! Core database tables have not been converted yet to UTF-8 Multibyte (utf8mb4)." J3.6. Прочитал, что это еще в 3.5 должно было отконвертироваться, но у меня это было пропущено из-за старого PHP. Для чего это вообще было сделано? База большая, через админку навряд ли получится отконвертировать, можно как-то еще это сделать? Сколько еще можно жить без конвертирования БД?
Спасибо.
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Re: UTF-8 Multibyte
« Ответ #1 : 31.07.2016, 17:46:18 »
Здесь php не играет роли. Кодировка utf8mb4 введена в MySQL начиная с версии 5.5, если я не ошибаюсь. Следовательно, нужно обновить сервер MySQL/MariaDB. Затем воспользоваться функцией обновления текущей версии, которая введена в Joomla начиная с версии 3.6.
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: UTF-8 Multibyte
« Ответ #2 : 31.07.2016, 17:50:03 »
А, точно, имел ввиду MySQL, ее тоже обновил :)
"Затем воспользоваться функцией обновления текущей версии" - а где эта функция и как она работает? И это же с БД связано, там можно же просто нажать "пофиксить БД", а эта функция чем может дополнить?
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Re: UTF-8 Multibyte
« Ответ #3 : 31.07.2016, 17:56:15 »
Компоненты -> Обновление Joomla! -> очистить кэш -> reinstall Joomla!

Может, можно и пофиксить. Расскажете потом - тоже интересен этот вопрос.
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: UTF-8 Multibyte
« Ответ #4 : 31.07.2016, 18:02:16 »
Ну, я подожду пока, поэтому отвечу не скоро :) А то эти обновления... Работает же. Вопросы остались:
"Для чего это вообще было сделано? База большая, через админку навряд ли получится отконвертировать, можно как-то еще это сделать? Сколько еще можно жить без конвертирования БД?"
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Re: UTF-8 Multibyte
« Ответ #5 : 31.07.2016, 18:48:11 »
1) Для чего? Это прогресс, который не остановить:
Цитировать
utf8mb4 - набор символов, используемый для хранения 4 байта в MySQL, внедрён в 2010 году начиная с версии 5.5.3. Главное отличие utf8mb4 от utf8 в том, что utf8mb4 задействует более полные возможности кодировки UTF8, позволяя поддерживать все языки и специальные символы, не поддерживающие utf8 (например японский язык, музыкальные и математические знаки, смайлики из ios - emoji).
2) Сколько можно жить с обычным UTF8? Да сколько угодно. Смотря что за цели. Некоторые таблицы вообще в ASCII можно сделать для оптимизации БД и сокращения её размера. Но все зависит от... It depends, как говорят.

А какая у вас версия ядра?
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: UTF-8 Multibyte
« Ответ #6 : 31.07.2016, 18:56:23 »
"не поддерживающие utf8, например японский язык" Ну, японский язык точно поддерживается, хе хе :)
Линукс? ядро 4.6.3
Цель - чтобы Joomla работала, без конвертации же работает всё, причем с кучей разных редких символов...
Один вопрос остался :)
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Re: UTF-8 Multibyte
« Ответ #7 : 31.07.2016, 19:01:10 »
Я имел в виду ядро CMS.

3) Конвертация:
Код
ALTER DATABASE/TABLE база/или-таблица CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: UTF-8 Multibyte
« Ответ #8 : 31.07.2016, 19:04:09 »
Я имел в виду ядро CMS.
У нее ядро есть? J3.6 разве не достаточно, что там за ядро такое ядрёное?
Хорошо, спасибо. Может на следующих выходных рискну :)
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Re: UTF-8 Multibyte
« Ответ #9 : 31.07.2016, 19:16:22 »
Есть ядро, есть расширения. Пожалуйста :]
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Re: UTF-8 Multibyte
« Ответ #10 : 31.07.2016, 22:43:03 »
Цитировать
Для чего это вообще было сделано?

ХЗ. Многое что было сделано в J за последние года 3-4 вызывает такие вопросы
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Re: UTF-8 Multibyte
« Ответ #11 : 31.07.2016, 23:01:16 »
Не только в Joomla! В WP тоже utf8mb4 уже давно используется. Вещь хорошая, не помешает: можно хранить математические формулы и ноты, а также символы китайского, корейского и японского алфавитов, что немаловажно для интернациональной CMS, ведь общий процент юзеров из этих стран достаточно велик. Однако вещь все же специфическая: лишний байт может увеличить объём таблицы на 25% (ключи и все остальное). В особенных случаях, если жмут размеры, то можно использовать другую кодировку, хотя для ординарных целей разница будет малозаметной.
« Последнее редактирование: 31.07.2016, 23:48:51 от Филипп Сорокин »
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: UTF-8 Multibyte
« Ответ #12 : 01.08.2016, 07:00:40 »
символы китайского, корейского и японского алфавитов
Это всё работает и в обычной utf-8! Про формулы и ноты не скажу...
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: UTF-8 Multibyte
« Ответ #13 : 01.08.2016, 13:09:32 »
Смайлики! Смайлики правять миром кодировкой!
 ^-^ ;) ;D :o
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: UTF-8 Multibyte
« Ответ #14 : 04.08.2016, 10:15:08 »
Поковырялся в Google.
Код: sql
ALTER DATABASE/TABLE база/или-таблица CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Это примерно 1% из того, что нужно сделать...
http://dchua.com/2014/08/15/migrating-from-utf8-to-utf8mb4-in-mysql/ - вот здесь написано подробно, еще после этого надо
Код: sql
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
Но это сильно сложно для меня, пока с хостером пообщаюсь на эту тему, наверное, будет проще лимиты исполнения скрипта убрать, чтобы из админки пофиксить базу...

Для чего это сделали? Чтобы без проблем можно было вставлять смайлик какашки 💩
На самом деле, это как-то связано с уязвимостью удаленного исполнения кода.
Еще в одной статье написано, что обычный utf-8 позволяет хранить 5.88% возможных кодов. Если какой-то символ при записи невозможно сохранить, то он просто обрежется, и ищи его потом...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться