То, что вы пытаетесь сделать, не является транзакцией.Транзакции используются с операторами DML (язык изменения данных) (например, выберите, вставьте, обновите, удалите).Поэтому фиксация здесь не правильная вещь.
Большинство переменных имеют глобальное значение и значение, которое допустимо только для текущего сеанса.Вы можете видеть это в руководстве здесь (посмотрите на scope
).Если вы не укажете, что хотите изменить глобальное значение, предполагается значение сеанса.
Попробуйте с помощью
set global character_set_server = 'utf8';
Добавьте это изменение также к вашему etc/my.cnf
под [mysqld]
раздел.В противном случае это изменение снова будет потеряно при перезапуске сервера mysql (mysqld).
И, наконец, вы можете оставить это на uft8mb4.Вы можете подумать, что вам не нужен дополнительный байт, но имейте в виду, что этот дополнительный байт используется только тогда, когда вы действительно используете в тексте символ, такой как эмодзи.И с точки зрения производительности это на самом деле работает лучше.Здесь у меня нет никаких доказательств, но я недавно был на конференции по базе данных, где одна речь была о проверках производительности.Там сказано, что работает намного лучше.UTF8, который был ранее реализован, является урезанным UTF8, который должен умереть как можно скорее.