В статье http://mysqldump.azundris.com/archives/60-Handling-character-sets.html это подробно обсуждается, а также показано, что произойдет.
Обратите внимание, что вы смешиваете CHARACTER SET (фактически кодировку) с COLLATION.
Набор символов определяет физическое представление строки в байтах на диске.Вы можете сделать это видимым, используя функцию HEX (), например SELECT HEX(str) FROM t WHERE id = 1
, чтобы увидеть, как MySQL хранит байты вашей строки.То, что MySQL предоставляет вам, может быть различным, в зависимости от набора символов вашего соединения, определенного с помощью SET NAMES ....
.
Сортировка - это порядок сортировки.Это зависит от набора символов.Например, ваши данные могут быть в наборе символов latin1, но они могут быть упорядочены в соответствии с одним из двух немецких порядков сортировки latin1_german1_ci или latin1_german2_ci.В зависимости от вашего выбора умлауты, такие как ö, будут сортироваться как oe или как o.
При изменении набора символов данные в вашей таблице необходимо переписать.MySQL прочитает все данные и все индексы в таблице, сделает скрытую копию таблицы, которая временно занимает место на диске, затем перемещает старую таблицу в скрытое место, перемещает скрытую таблицу на место и затем удаляет старые данные, освобождаяместо на диске.В течение некоторого промежутка времени вам потребуется в два раза больше места для этого.
При изменении параметров сортировки изменяется порядок сортировки данных, но не самих данных.Если столбец, который вы изменяете, не является частью индекса, ничего не нужно делать, кроме переписывания файла frm, и достаточно недавние версии MySQL не должны делать больше.
Когда вы изменяете параметры сортировки столбцаэто часть индекса, индекс необходимо переписать, так как индекс представляет собой отсортированный фрагмент таблицы.Это снова вызовет логику копирования таблицы ALTER TABLE, описанную выше.
MySQL пытается сохранить данные, выполняя это: Пока ваши данные могут быть представлены в целевом наборе символов, преобразование не будет с потерями.Предупреждения будут напечатаны, если происходит усечение данных, и данные, которые не могут быть представлены в целевом наборе символов, будут заменены на?