Mysql не фиксирует изменения после установки набора символов - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь установить сервер набора символов с помощью set character_set_server = utf8; (это первоначально utf8mb4) после того, как я вошел в MySQL, используя mysql -u root -p (я также попробовал другого пользователя и также указал БД с --database).После выполнения команды set я проверил переменную с помощью show variables like "%charac%".Это показывает правильное значение как utf8 .Тем не менее, после того, как я вышел из сеанса и повторно вошел в систему и перепроверил переменную, она показывает utf8mb4.Я также попытался запустить commit; после установки набора символов, снова это не изменило значение.Что мне делать?

1 Ответ

0 голосов
/ 05 февраля 2019

То, что вы пытаетесь сделать, не является транзакцией.Транзакции используются с операторами DML (язык изменения данных) (например, выберите, вставьте, обновите, удалите).Поэтому фиксация здесь не правильная вещь.

Большинство переменных имеют глобальное значение и значение, которое допустимо только для текущего сеанса.Вы можете видеть это в руководстве здесь (посмотрите на scope).Если вы не укажете, что хотите изменить глобальное значение, предполагается значение сеанса.

Попробуйте с помощью

set global character_set_server = 'utf8';

Добавьте это изменение также к вашему etc/my.cnf под [mysqld] раздел.В противном случае это изменение снова будет потеряно при перезапуске сервера mysql (mysqld).

И, наконец, вы можете оставить это на uft8mb4.Вы можете подумать, что вам не нужен дополнительный байт, но имейте в виду, что этот дополнительный байт используется только тогда, когда вы действительно используете в тексте символ, такой как эмодзи.И с точки зрения производительности это на самом деле работает лучше.Здесь у меня нет никаких доказательств, но я недавно был на конференции по базе данных, где одна речь была о проверках производительности.Там сказано, что работает намного лучше.UTF8, который был ранее реализован, является урезанным UTF8, который должен умереть как можно скорее.

...