Что я могу сделать, чтобы при репликации использовался latin1 вместо utf-8?
Я выполняю миграцию между сервером MySQL 5.1.22 (ведущим) в системе Linux и сервером MySQL 5.1.42 (ведомым) в системе FreeBSD.Моя репликация работает хорошо, но когда символы не ascii находятся в моих varchars, они становятся "странными".Linux / MySQL-5.1.22 показывает следующие переменные набора символов:
character_set_client=latin1
character_set_connection=latin1
character_set_database=latin1
character_set_filesystem=binary
character_set_results=latin1
character_set_server=latin1
character_set_system=utf8
character_sets_dir=/usr/share/mysql/charsets/
collation_connection=latin1_swedish_ci
collation_database=latin1_swedish_ci
collation_server=latin1_swedish_ci
В то время как FreeBSD показывает
character_set_client=utf8
character_set_connection=utf8
character_set_database=utf8
character_set_filesystem=binary
character_set_results=utf8
character_set_server=utf8
character_set_system=utf8
character_sets_dir=/usr/local/share/mysql/charsets/
collation_connection=utf8_general_ci
collation_database=utf8_general_ci
collation_server=utf8_general_ci
Установка любой из этих переменных из CLI MySQL не имеет никакого эффекта,и установка их в my.cnf или в командной строке приводит к тому, что сервер не запускается.
Конечно, на обоих серверах соответствующие таблицы созданы одинаково, в данном случае с DEFAULT CHARSET = latin1.Позвольте мне привести пример:
CREATE TABLE `test` (
`test` varchar(5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Когда я выполняю на мастере, в терминале Latin1, «INSERT INTO test VALUES ('æøå')», это становится на ведомом устройстве, когда я выбираю егос терминала на основе Latin1
+--------+
| test |
+--------+
| æøå |
+--------+
На терминале на основе UTF-8 на ведомом устройстве репликации тест содержит:
+--------+
| test |
+--------+
| æøå |
+--------+
Итак, я пришел к выводу, что он преобразуется в utf8, дажехотя определение таблицы - латинский.Это правильный вывод?
Конечно, на мастере, в терминале latin1, он по-прежнему говорит:
+------+
| test |
+------+
| æøå |
+------+
Так как оба системных набора символов являются utf-8, если я установлюоба терминала для utf-8 и снова выполните "INSERT INTO test VALUES (''øå')" на ведущем устройстве с терминалом utf-8, на ведомом устройстве с utf-8 я получаю:
+------------+
| test |
+------------+
| æøà |
+------------+
Еслимой вывод верен, все мои реплицированные данные преобразуются в utf8 (если это utf8, они обрабатываются как latin1 и преобразуются в utf8), в то время как все старые данные в таблице, как предполагает CREATE TABLE, latin1.Я хотел бы преобразовать все это в utf-8, если бы не тот факт, что устаревшие приложения полагаются на то, что он является латиноамериканским1, поэтому мне нужно держать его в латиноамериканском1, пока они еще существуют.
Что можетЯ делаю так, чтобы репликация считывала латиницу 1, обрабатывает ее как латиницу 1 и записывает на ведомом устройстве как латынь 1?
Cheers
Nik