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.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные сети, рекомендую познакомиться с онлайн-курсом «Сетевой инженер» в OTUS. Курс не для новичков, для поступления нужно пройти .

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

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

В принципе, по тексту ошибки все понятно. Таблицы в базе данных почему-то имеют не ту кодировку, которая нужна. Работает при этом все нормально. Операционная система — 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 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

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

  1. MBear

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

    • Zerox

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

      • MBear

        Да я понимаю, просто он выдает не все таблицы в базе. проблема была в «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

        • Zerox

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

          • MBear

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

            • Zerox

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

  2. MBear

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

  3. Аватар

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

    • Zerox

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

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

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

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