Перейти к основному содержанию

Unknown collation: 'utf8mb4_0900_ai_ci'

SQL

При попытке импорта данных в базу MySQL или при попытке создания базы из файла SQL можно получить ошибку вида:

ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci'

Проблема касается кодировки.

CHARACTER SET — это кодировка, набор символов. CHARACTER SET может включать в себя различные наборы символов. Различные CHARACTER SET могут включать примерно одинаковые наборы символов но в различном порядке (см. например koi8ru и cp1251). MySQL необходимо знать какой CHARACTER SET будет использован для данных в таблице, чтобы корректно проводить сортировку и индексацию данных.

COLLATION — способ, с помощью которого следует упорядочивать и сравнивать данные в БД. Для одного и того же CHARACTER SET может существовать несколько COLLATION. Например: cp1251_general_ci — сравнение не чувствительное к регистру, cp1251_bin — чувствительное к регистру.

В нашем случае файл SQL был снят с СУБД, которая понимает COLLATION 'utf8mb4_0900_ai_ci', а СУБД, в которую мы загружаем данные — не понимает.

Мы можем заменить в файле SQL COLLATION 'utf8mb4_0900_ai_ci' на какой-то другой, к примеру, на 'utf8mb4_unicode_ci'. Для этого можно исправить SQL файл в текстовом редакторе, например, было:

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Стало:

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Строк может быть много, поможет автозамена.

Если файл большой, то лучше воспользоваться командой sed:

sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' /path_to_sql/db.sql

sql

Теги

 

Похожие материалы

Мониторинг SQL запросов в Oracle Database через Zabbix

Понадобилось мне как-то мониторить в заббиксе свободное место на сервере Oracle. Всё бы ничего, однако задача свелась к более тонкой. Нужно мониторить свободное место внутри определённого tablespace. Данную задачу можно решить с помощью SQL запроса. Осталось только научиться передавать результат SQL запроса в zabbix. Приступим. 

Теги