Текущая настройка MySQL использует «utf8»

Текущая настройка MySQL использует «utf8»

от Виктор Мельников -
Количество ответов: 25

Здравствуйте, при настройке Moodle, оранжевым цветом отмечаются 3 рекомендации, одна из них:

mysql_full_unicode_support

непрохождение данного теста указывает на возможную проблему

Текущая настройка MySQL или MariaDB использует «utf8». Этот набор символов не поддерживает четырехбайтные символы, которые используют некоторые смайлики. Попытка использования этих символов приведет к ошибке при обновлении записи, и любая информация, отправляемая в базу данных, будет потеряна. Пожалуйста, подумайте о том, чтобы изменить настройки на utf8mb4. Подробную информацию см. в документации.

Где посмотреть эту настройку? Уже везде вроде установили "utf8mb4".

Прошу помощи в решении данного вопроса.

В ответ на Виктор Мельников

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers
Где посмотреть эту настройку?

А где установлен сайт?

Уже везде вроде установили "utf8mb4".

Если выводит такое сообщение, то не везде улыбаюсь

У вас сам сервер MySQL не использует utf8mb4, а только лишь utf8.

Справку читали? Доступ к my.cnf(ini) имеете? В нем нужно прописать character-set-server = utf8mb4 и рестартануть.

Проверьте, какие кодировки использует сервер сейчас, выполнив в консоли MySQL: SHOW VARIABLES LIKE  'char%';

Если увидите character_set_server - utf8, то и база данных будет в utf8, поэтому получаете предупреждение.

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Виктор Мельников -

Moodle установлен на локальном сервере на следующем ПО: Debian 9, установлен php7.1, apache 2.4, MariaDB.

Справку читали, но видимо не дочитали или действительно, нет четкой инструкции по этому исправлению.

В ответ на Виктор Мельников

Re: Текущая настройка MySQL использует «utf8»

от Виктор Мельников -

Все, исправили, нужно было ещё поменять в файле config.ph в строке 'dbcollation' => 'utf8mb4_unicode_ci'

А по вашей инструкции https://docs.moodle.org/32/en/MySQL_full_unicode_support, для MariaDB, нужно менять значения по этому пути: 

/etc/mysql/mariadb.conf.d/50-server.cnf
В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -
Вадим, а если на хостинге запрос SHOW VARIABLES LIKE  'char%'; выдает
character_set_client utf8mb4
character_set_connection utf8
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Это означает, что 3.6 должна установиться?
Доступ к my.conf техподдержка не дает на виртуальном хостинге. Говорит, это может повлиять на других пользователей. Но ведь это всего лишь расширенная версия того же UTF и другие пользователи не должны заметить даже этого или это не так?
И какая версия только ругается на эти проверки, но позволяет поставить системы? 3.6 даже ставить не желает грущу
В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers

На хостинг с такими настройками MySQL устанавливал 3.5.2+, потом ко мне не обращались за обновлением Мудл. Думаю, 3.6 тоже должна установиться. Предупреждения будут выводиться, но это мелочь. Бывали случаи и пострашнее, когда character_set_server и character_set_system - вообще не юникод, а latin1 или windows-1251. Главное, чтобы сама БД и таблицы были в UTF-8 и соединение в этой же кодировке.

Вы в config.php прописывали вручную строку 'dbcollation' => 'utf8mb4_unicode_ci' при установке 3.6?

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Так ничего не прописывал, на установщике остановился с предложением устранить проблемы, и только кнопка "Обновить".

Попробовал 3.5.3 тоже самое. Техподдержку уговаривал до полуночи, Но таймвеб непреклонен, переходи говорит на VDS и все тут. Эх, а хостинг мне нравится.

То есть я могу прописать указанный параметр и заново запустить установку?

Прописал, продолжил установку

То же самое: Вам следует устранить указанные выше проблемы (ошибки), прежде чем начать установку этой версии Moodle!

В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers
То есть я могу прописать указанный параметр и заново запустить установку?

Что мешает попробовать?

Если не получится, есть вариант установки сначала 3.1.3/4, потом попробовать обновить. На timeweb точно работала 3.2.5+ (Build: 20171013)

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Попробовал, но безуспешно. На каком шаге нужно это прописать?

С самого начала еще нет этого файла config.php, а потом уже только кнопка Обновить. И после редактирования файла, ничего не меняется.

В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers

config.php создается после того, как будут указаны параметры базы данных (имя БД, имя пользователя, пароль) и нажата кнопка далее. После этого создается пустая база данных и открывается страница с лицензией «Заметка об авторском праве». Вот в этот момент можно внести в config.php нужные изменения, проверить кодировку БД.

Я сейчас провожу эксперимент с целью обновления версии Мудл с настройками MySQL, максимально соответствующими хостингу:

  1. Имеется в наличии локальная установка Мудл 3.1.4+ (Build: 20170112) из пакета Windows Installer. Все настройки серверного ПО по умолчанию. Единственная проблема - в этой инсталяшке сервер БД - MariaDB.
  2. Поэтому для чистоты эксперимента я из такой же локальной установки (Мудл 3.0.3) взял MySQL 5.5.36 (вместе с БД Мудл). Конфиг my.ini прикрепил. В нем нет ничего про Барракуду, utf8mb4 и т. п., т. е., это стандартный конфиг MySQL для «древней» версии Мудл.
    Проверка ПО сервера перед обновлением БД с 3.0.3 до 3.1.4:
    038
    Внизу таблицы предупреждение:
    034
  3. Обновление запускал через консольный скрипт, т. к. через веб-морду долго. Обновление прошло успешно, всё работает, но предупреждений добавилось:
    041
    Кодировки сервера БД:
    039
    Но сама база данных Мудл в кодировке UTF-8:
    044
    Скрипт mysql_compressed_rows.php выводит такую инфу:
    033
    Но я пока ничего фиксить не буду, а попробую обновить Мудл до последней 3.5.3+, потому как для 3.6 нужна версия MySQL 5.6, а у нас 5.5.36
  4. Удаляю файлы Мудл, оставив только config.php. Распаковываю moodle-latest-35.zip. Обновление опять запускаю через консольный скрипт с параметрами --non-interactive --lang=ru. Без --non-interactive почему-то не воспринимает команды подтверждения Yes(Да) грущу
    Обновление прошло успешно. Проверяем страницу с версиями ПО:
    moodle35212
    И видим все предупреждения, о которых тут уже мульйон копий сломали. Но Мудл же обновили Да, сайт работает, можно искать глюки, где эти предупреждения дадут о себе знать подмигиваю
    А ещё можно попробовать что-то поднастроить, но без доступа к my.ini (my.cnf) сервера MySQL. Кодировку таблицы можем исправить с utf8 на utf8mb4? Нужно попробовать. И скрипт mysql_compressed_rows.php снова запустим, хотя толку на хостинге не будет.
В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers

Продолжение:

базу данных конвертируем запросом

ALTER DATABASE `moodle` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Получаем:

moodle35212

Дальше запускаем в консоли скрипт (находимся в каталоге /admin/cli/):

php mysql_collation.php -l

Вывод в итоге показывает: utf8_unicode_ci - 1422. Пробуем пофиксить:

php mysql_collation.php --collation=utf8mb4_unicode_ci

Результат: Converted: 401, skipped: 1021, errors: 0

Что-то исправили, что-то пропущено. И это не лечится на хостинге, так как нет поддержки Барракуда, чтобы RAW FORMAT таблиц изменить с COMPACT на COMPRESSED.

Теперь запустим

php mysql_compressed_rows.php -l

Видим, что-то осталось, как было - Compact, а что-то - Compressed (видимо, это так повлияло обновление Мудл).
mdl_data                        Compact     (needs fixing)
mdl_data_fields                 Compressed
mdl_enrol_lti_lti2_consumer     Compressed
mdl_enrol_paypal                Compressed
mdl_lti                         Compact     (needs fixing)
mdl_oauth2_issuer               Compact     (needs fixing)
mdl_user                        Compressed
mdl_user_info_field             Compact     (needs fixing)

На локалке это можно попробовать это исправить. Запускаем фикс:

php mysql_compressed_rows.php -f

Результат:
mdl_data                         ... Compressed
mdl_lti                          ... Compressed
mdl_oauth2_issuer                ... Compressed
mdl_user_info_field              ... Compressed

После всех этих манипуляций (без редактирования настроек сервера MySQL) все предупреждения  (кроме https) на странице проверки версий ПО в Мудл испарились. Скрин не буду выкладывать, уж поверьте на слово. улыбаюсь

На хостинге ничего исправить, скорее всего, не получится. Придется оставить, как есть.

Или брать VDS, как советует хостинг, или искать «новейший» хостинг с MySQL 8, где Барракуда и все примочки innodb (file_per_table, large_prefix) включены «из каропки»

 

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Вот это эксперимент! Вадим спасибо! Буду пробовать, но уже задумался про VDS улыбаюсь Но как говорится, на VDS-то что, ты попробуй на виртуальном улыбаюсь

В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Смотрите, если хостинг для каких-то таблиц поддерживает compressed, может сделать экспорт, на локальной машине выполнить конвертацию, а потом вгрузить дампо обратно?
В ответ на Vadim Dvorovenko

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers
если хостинг для каких-то таблиц поддерживает compressed

Неа, пока такого не встречал. И такой эксперимент я проводил, не помогает.

С timeweb, на котором у Алексея сайт установлен, разобрались: не нужно прописывать в config.php строку 'dbcollation' => 'utf8mb4_unicode_ci', из-за неё не проходит проверка ПО в админке и нет кнопки продолжить для обновления Мудл. А без этой строки я обновил Мудл до последней версии 3.6.1+. Алексей откатил версию на Moodle 3.5.3+ (Build: 20181210) из-за плагинов, пока отсутствующих для 3.6.

Предупреждения, конечно, остались, но куда уж без этого на хостинге с row_format=compact

038

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Нет, не получилось ничего. Стал ставить 3.1 Там версию php нужно не 7, на хостинге поменял на меньшую (5.4)

В файле сменил кодировку

Но скрипты никакие все равно не дает запускать в SSh-консоли на хостинге.

И все равно нет кнопки Установить


Приложение 2018-12-10_23-00-50.png
В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Вадим, изучаю форум перед обновлением системы с 3.2 до 3.5, нашел Ваше сообщение о

Бывали случаи и пострашнее, когда character_set_server и character_set_system - вообще не юникод, а latin1 или windows-1251

Вот у меня как раз такой случай. Сервер свой ubuntu server. Хочу избавиться от этого сообщения про mysql_full_unicode_support

Но увидел Ваше сообщение, что-то засомневался. Что Вы имели в виду по "пострашнее", Там что-то особенное нужно делать? Подскажите пожалуйста.

У меня сейчас таблицы такого вида:

mysql> SHOW VARIABLES LIKE  'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0,00 sec)

character_set_server как раз latin1

Документацию посмотрел, там сказано про очень большое время конвертирования при больших таблицах. А большие это сколько? У меня дамп БД занимает 3,5 Гб Это много или мало?

Сколько скрипт работает обычно?

В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers
Сервер свой ubuntu

Версия MySQL какая? Свой сервер нужно настроить так, чтобы все кодировки были такие:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

У меня дамп БД занимает 3,5 Гб Это много или мало?

Это же вся БД, а не одна таблица. Никаких проблем при конвертации не будет. У меня дамп тоже ± такого размера.

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Версия MySQL 5.7.26
PHP Version 7.0.33-5

Как конвертировать правильно? Судя по документации можно просто запустить этот скрипт:

$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
Или нужно вручную прописывать, правда та куча файлов my.conf в /etc/mysql который нужен?

И можно ли откатиться, если что-то пойдет не так?

В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers

MySQL ищет конфиг (и это не my.conf, а my.cnf) в нескольких каталогах (https://dev.mysql.com/doc/refman/5.7/en/option-files.html):

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $MYSQL_HOME/my.cnf
  • [datadir]/my.cnf
  • ~/.my.cnf

Проверьте каталог /etc, есть ли там my.cnf, создайте, если отсутствует, и пропишите:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4
default-storage-engine = InnoDB
init-connect = "set collation_connection=utf8mb4_unicode_ci"
innodb_file_per_table = true
innodb_file_format = barracuda
innodb_large_prefix = true

Остальные настройки «по вкусу».

Перезапускаете сервер MySQL, дальше конвертируете базу данных Мудл:

ALTER DATABASE `moodle` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';

и потом выполняете скрипты mysql_collation.php и mysql_compressed_rows.php

Естественно, нужно сделать дамп БД перед этим.

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -

Спасибо, Вадим, Вам огромное!

А лучше сначала систему обновить, или сначала конвертировать?

У меня сейчас 3.2 хочу на 3.5 перейти. У 3.2 сообщения так-то нет про эту кодировку. Не повредит это 3.2, если конвертирую его перед обновлением?

В ответ на Alexey Piguzov

Re: Текущая настройка MySQL использует «utf8»

от Vadim Tabunshchik -
Изображение пользователя Developers

Если у 3.2 нет сообщения про кодировку, то и конвертировать ничего не нужно. Тем более, что там скрипт mysql_collation.php конвертирует в utf8_general_ci улыбаюсь

Обновитесь до 3.5, зайдите в проверку ПО сервера, посмотрите предупреждения и тогда исправляйте.

В ответ на Vadim Tabunshchik

Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -
А если отличаются немного, это критично
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0,00 sec)
В ответ на Alexey Piguzov

Re: Re: Текущая настройка MySQL использует «utf8»

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Важно не какой characterset у сервера, важно какой по умолчанию у базы данных moodle. поменять Collation у самой бд можно без резервирования, через phpmyadmin, делается моментально, так как по сути это просто значение по умолчанию для новых таблиц, но moodle проверят именно его. У самих таблиц, скорее всего, кодировка utf8, так как её задаёт скрипт установщика moodle. А вот у базы мог остаться неправильный collation, если создавали бд сами, а не скриптом установки.
А вот конвертация для full_unicode_support - необязательная процедура, нужна только если хотите использовать эмодзи на сайте
В ответ на Vadim Dvorovenko

Re: Re: Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -
Спасибо! Пока не пробовал, собираю информацию, и жду удачного момента (и бессонной ночи) для обновления улыбаюсь
А эмодзи да нужны, больше студентам конечно, они привыкли эмоции выражать, а если есть возможность почему бы не использовать

P.S. Здесь по ходу форум обновился, но пропал HTML-редактор
В ответ на Alexey Piguzov

Re: Re: Re: Re: Текущая настройка MySQL использует «utf8»

от Александр Анисимов -
Изображение пользователя Майнтейнер перевода Изображение пользователя Эксперт по Moodle

При ответе нужно нажать ссылку "Относится к дополнительным настройкам", тогда появится редактор. удивляюсь

В ответ на Александр Анисимов

Re: Re: Re: Re: Re: Текущая настройка MySQL использует «utf8»

от Alexey Piguzov -
При ответе нужно нажать ссылку "Относится к дополнительным настройкам"

Не тривиально конечно. Да и в менюшке стили не убираются. И предварительно отформатированный раньше в рамочке был. А где кстати его предварительно отформатировать можно?