Подтвердить что ты не робот

Как настроить сопоставление по умолчанию для всех таблиц, созданных в базе данных?

У меня есть дамп базы данных, взятый из сломанной базы данных, который мне нужно импортировать в чистую установку. Однако исходная база данных, похоже, настроена на использование utf8_unicode_ci.

При импорте этого дампа в чистую базу данных все базы данных создаются с помощью utf8_general_ci по умолчанию, который дает мне повторяющиеся записи для слов, включая ß, потому что general делает 'ß' == 's', тогда как utf8_unicode_ci предположительно имеет 'ß' == 'ss'.

Но при импорте mysql всегда, по-видимому, выбирает значение utf8_general_ci по умолчанию при создании таблицы, даже если я установил для базы данных (схемы) значение по умолчанию utf8_unicode_ci.

Есть ли способ заставить его создавать таблицы с помощью utf8_unicode_ci без необходимости вводить инструкции alter table в мой дамп? Он имеет размер в несколько ГБ и будет больно изменять вручную.

Конфигурирование всей системы MySQL в порядке.

Я пробовал настройку:

collation-server=utf8_unicode_ci

в my.cnf, но это не похоже на настройку по умолчанию для создания таблицы.

4b9b3361

Ответ 1

По-видимому, нет способа принудительного сопоставления вновь созданных таблиц, если вы укажете кодировку в своих операторах создания, что означает, что если у вас есть:

CREATE TABLE foo
...
CHARSET=utf8;

Он будет неявно устанавливать его в utf8_general_ci, который является сортировкой по умолчанию для этой кодировки. Это зависит от настроек базы данных, настроек системы и настроек подключения.

В итоге я вызвал это:

 cat dump.sql|sed s/CHARSET=utf8/CHARSET=utf8\ COLLATE=utf8_unicode_ci/ > dump_replaced.sql

и просто ждал.

Ответ 2

Я работал над этим же вопросом сегодня утром, и мне удалось установить сортировку таблицы следующим образом.

DROP TABLE IF EXISTS `agtAgentTypes`;
CREATE TABLE `agtAgentTypes` (
  `agentTypeID` int(11) NOT NULL,
  `agentType` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`agentTypeID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

По какой-то причине кажется, что движок и кодировка нуждаются в =, но сортировка отключается, если она есть. Я попробовал это, потому что заметил, что Примеры Charset MySQL также не использовали =.

Это было протестировано против MySQL Community Server 5.5.32-cll-lve.