Home » Zabbix » Ошибка в Zabbix - Неподдерживаемая кодовая страница

Ошибка в Zabbix - Неподдерживаемая кодовая страница

Некоторое время назад столкнулся с ошибкой в web интерфейсе Zabbix после очередного обновления сервера. Текст ошибки в веб интерфейсе - Неподдерживаемая кодовая страница или тип сравнения для таблиц. То же самое было на английском языке в логе - character set name or collation name that is not supported by Zabbix found in 379 column(s) of database "zabbix", only character set "utf8" and collation "utf8_bin" should be used in database.

Хочешь научиться автоматически разворачивать и поддерживать высоконагруженные проекты? Тогда рекомендую познакомиться с онлайн курсом " Infrastructure as a code." в OTUS. Актуально для системных администраторов и devops инженеров. Подробности по .

Выглядела ошибка вот так.

Неподдерживаемая кодовая страница или тип сравнения для таблиц

В принципе, по тексту ошибки все понятно. Таблицы в базе данных почему-то имеют не ту кодировку, которая нужна. Работает при этом все нормально. Операционная система - Centos 8.

character set name or collation name that is not supported by Zabbix found in 379 column(s) of database "zabbix"

Стал решать проблему в лоб. Взял и изменил кодировку у всех таблиц в базе данных Zabbix. На деле это оказалось не такой простой задачей, как виделось изначально. В итоге поступил следующим образом. Вводим в консоли Mysql следующую команду:

SELECT CONCAT(  'ALTER TABLE `', t.`TABLE_SCHEMA` ,  '`.`', t.`TABLE_NAME` ,  '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;' ) AS sqlcode
FROM  `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` =  'zabbix'
ORDER BY 1
LIMIT 0 , 180;

Работа этой команды сформирует на выходе набор из команд для перекодировки каждой таблицы в отдельности. Их нужно все запустить. Если делать все через phpmyadmin, то не возникает проблем. Все команды копируются разом и исполняются. Если будете делать через консоль сервера, то придется как-то обрабатывать вывод, чтобы подать его потом на вход. Надо будет от лишних символов очищать.

Не забудьте сделать бэкап базы данных перед тем, как начнете с ней что-то делать.

Онлайн курс Основы сетевых технологий

Теоретический курс с самыми базовыми знаниями по сетям. Курс подходит и начинающим, и людям с опытом. Практикующим системным администраторам курс поможет упорядочить знания и восполнить пробелы. А те, кто только входит в профессию, получат на курсе базовые знания и навыки, без воды и избыточной теории. После обучения вы сможете ответить на вопросы:
  • На каком уровне модели OSI могут работать коммутаторы;
  • Как лучше организовать работу сети организации с множеством отделов;
  • Для чего и как использовать технологию VLAN;
  • Для чего сервера стоит выносить в DMZ;
  • Как организовать объединение филиалов и удаленный доступ сотрудников по vpn;
  • и многое другое.
Уже знаете ответы на вопросы выше? Или сомневаетесь? Попробуйте пройти тест по основам сетевых технологий. Всего 53 вопроса, в один цикл теста входит 10 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

10 комментариев

  1. Кстати, скрипт не все таблицы переделывает, у меня почему то половина осталась со старой кодировкой. :(

    • Скрипт просто формирует вывод, состоящий из команд на смену кодировки для каждой базы. Он сам ничего не делает. Вы вручную потом команды исполняете.

      • Да я понимаю, просто он выдает не все таблицы в базе. проблема была в "LIMIT 90 , 180;" она ограничивала количество выводимых строк.

        Если сделать так:

        SELECT CONCAT(  'ALTER TABLE `', t.`TABLE_SCHEMA` ,  '`.`', t.`TABLE_NAME` ,  '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;' ) AS sqlcode
        FROM  `information_schema`.`TABLES` t
        WHERE 1 AND t.`TABLE_SCHEMA` =  'zabbix'
        ORDER BY 1 into outfile '/var/lib/mysql-files/conv.sql';

        То получится готовый sql файлик, который можно запустить:
        source /var/lib/mysql-files/conv.sql

        все это просто из консоли mysql

        • Оу, я ошибся. Надо было не 90 , 180 ставить, а 0, 180. А так он только с 90-й таблицы подготовил вывод.

          • А зачем там вообще это ограничение?

            • Из другой задачи пришло. Там нужно было разделить на части, так как не удобно было работать с большим списком. Я просто взял готовый вариант.

  2. По документации база должна быть в UTF8/utf8_bin если отличаются, при робновлении будет большой геморрой - неоднократно сталкивался.

  3. utf8mb4 универсальнее. И сейчас по-дефолту в mysql\mariadb. Индексы, конечно, место будут занимать больше, но это плата за универсальность.

    • С этой кодировкой я и получил описанную ошибку. Как раз дефолтные настройки базы стояли.

Добавить комментарий

Ваш адрес email не будет опубликован.

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