Как настроить сопоставление по умолчанию для всех таблиц, созданных в базе данных?
У меня есть дамп базы данных, взятый из сломанной базы данных, который мне нужно импортировать в чистую установку. Однако исходная база данных, похоже, настроена на использование 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, но это не похоже на настройку по умолчанию для создания таблицы.
Ответы
Ответ 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.
Ответ 3
если вы используете phpmyadmin, а затем прочитайте статью ниже:
ИЛИ попробуйте этот путь
CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]
Ссылка