The following applies to replication between MySQL servers that use different character sets:
If the master uses MySQL 4.1, you must
always use the same
global character set and collation on
the master and the slave, regardless of the MySQL version
running on the slave. (These are controlled by the
--character-set-server
and
--collation-server
options.)
Otherwise, you may get duplicate-key errors on the slave,
because a key that is unique in the master character set
might not be unique in the slave character set. Note that
this is not a cause for concern when master and slave are
both MySQL 5.0 or later.
If the master is older than MySQL 4.1.3, the character set
of any client should never be made different from its global
value because this character set change is not known to the
slave. In other words, clients should not use SET
NAMES
, SET CHARACTER SET
, and
so forth. If both the master and the slave are 4.1.3 or
newer, clients can freely set session values for character
set variables because these settings are written to the
binary log and so are known to the slave. That is, clients
can use SET NAMES
or SET
CHARACTER SET
or can set variables such as
collation_client
or
collation_server
. However,
clients are prevented from changing the
global value of these variables; as
stated previously, the master and slave must always have
identical global character set values. This is true whether
you are using statement-based or row-based replication.
If you have databases on the master with character sets that
differ from the global
character_set_server
value,
you should design your CREATE
TABLE
statements so that tables in those databases
do not implicitly rely on the database default character
set. A good workaround is to state the character set and
collation explicitly in CREATE
TABLE
statements.
User Comments
Add your own comment.