Как установить параметры сортировки по умолчанию для всех таблиц, которые создаются в базе данных? - PullRequest
13 голосов
/ 27 июля 2011

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

При импорте этого дампа в чистую базу данных все базы данных создаются с заданным по умолчанию utf8_general_ci, который дает мне повторяющиеся записи для слов, в том числе ß, потому что общие значения составляют 'ß' == '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, но это, похоже, не устанавливает параметры сортировки по умолчанию для создания таблиц.

Ответы [ 3 ]

9 голосов
/ 23 марта 2014

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

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;

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

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

4 голосов
/ 28 июля 2011

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

CREATE TABLE foo
...
CHARSET=utf8;

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

Я закончил так:

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

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

3 голосов
/ 27 июля 2011

если вы используете phpmyadmin, прочитайте статью ниже:

http://kb.mediatemple.net/questions/138/Default+MySQL+character+set+and+collation#gs

ИЛИ попробуйте так

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]

1010 * Reference *

...