Que puis-je faire pour m'assurer que la réplication utilisera latin1 au lieu de utf-8?charsets dans la réplication MySQL
Je migre entre un serveur MySQL 5.1.22 (maître) sur un système Linux et un serveur MySQL 5.1.42 (esclave) sur un système FreeBSD. Ma réplication fonctionne bien, mais quand des caractères non-ascii sont dans mes varchar, ils deviennent "bizarres". Linux/MySQL 5.1.22 montre les variables de jeu de caractères suivantes:
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
Alors que FreeBSD montre
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
la configuration de ces variables de la CLI MySQL n'a pas d'effet, et en les replaçant dans my.cnf ou à la ligne de commande fait que le serveur ne démarre pas.
Bien sûr, les deux serveurs ont créé les tables en question de la même manière, dans ce cas avec DEFAULT CHARSET = latin1. Permettez-moi de vous donner un exemple:
CREATE TABLE `test` (
`test` varchar(5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Quand je le maître ne, dans un terminal Latin1, « INSERT INTO de test (« æøå ») », cela devient l'esclave, quand je le sélectionner dans une terminal basé sur latin1
+--------+
| test |
+--------+
| æøå |
+--------+
sur un terminal basé UTF-8 sur l'esclave de réplication, test contient:
+--------+
| test |
+--------+
| æøå |
+--------+
donc, ma conclusion est qu'il est converti en UTF8, même si la définition de la table est latin 1. Est-ce une conclusion correcte?
Bien sûr, sur le maître, dans un terminal latin1, il dit encore:
+------+
| test |
+------+
| æøå |
+------+
Puisque les deux jeux de caractères du système sont utf-8, si je mets les deux bornes à utf-8 et de faire à nouveau " INSERT INTO de test ('æøå') » sur le maître avec un terminal utf-8, sur l'esclave avec utf-8 je reçois:
+------------+
| test |
+------------+
| æøà |
+------------+
Si ma conclusion est correcte, toutes mes données répliquées est converti en utf8 (si c'est utf8, il est traité comme latin1 et converti en utf8), alors que toutes les anciennes données de la table sont, comme la CRE ATE TABLE suggère, latin1. J'adorerais tout convertir en utf-8 si ce n'était le fait que les applications héritées reposent sur latin1, donc je dois le garder en latin1 tant qu'elles existent.
Que puis-je faire pour m'assurer que la réplication lit latin1, le traite comme latin1 et l'écrit sur l'esclave comme latin1?
Vive
Nik