Что я могу сделать, чтобы гарантировать, что репликация будет использовать latin1 вместо utf-8?charsets в репликации MySQL
Я перемещаюсь между сервером MySQL 5.1.22 (master) в системе 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
Установки любые из этих переменных из MySQL CLI не имеет никакого эффекта, и устанавливать их в my.cnf или в командной строке заставляет сервер не запускаться.
Конечно, оба сервера имеют соответствующие таблицы, созданные таким же образом, в этом случае с DEFAULT CHARSET = latin1. Позвольте мне дать вам пример:
CREATE TABLE `test` (
`test` varchar(5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Когда я на хозяина этого, в терминале Latin1, «INSERT INTO тест VALUES („æøå“)», это становится на подчиненном, когда я выбираю его из Latin1 на базе терминала
+--------+
| test |
+--------+
| æøå |
+--------+
на основе терминала UTF-8 на подчиненном репликации, тест содержит:
+--------+
| test |
+--------+
| æøå |
+--------+
Так что мой вывод заключается в том, что она превращается в utf8, хотя определение таблицы латино 1. Это правильный вывод?
Конечно, на хозяина, в latin1 терминале, он по-прежнему говорит:
+------+
| test |
+------+
| æøå |
+------+
Поскольку оба набора системы символов являются UTF-8, если установить оба терминала в UTF-8 и сделать снова " INSERT INTO тест VALUES («æøå»)»на хозяина с терминалом UTF-8, на ведомом с UTF-8 я получаю:
+------------+
| test |
+------------+
| æøà |
+------------+
Если мой вывод правилен, все мои копируемые данные преобразуются в utf8 (если это utf8, он рассматривается как latin1 и преобразован в utf8), тогда как все старые данные в таблице, как CRE ATE TABLE предлагает, latin1. Я бы хотел преобразовать все это в utf-8, если бы не тот факт, что устаревшие приложения полагаются на то, что он является latin1, поэтому мне нужно сохранить его в latin1, пока они все еще существуют.
Что я могу сделать, чтобы репликация читала latin1, рассматривает ее как latin1 и записывает ее на подчиненный как latin1?
Приветствие
Nik