# Replication of character sets. # This test will fail if the server/client does not support enough charsets. source include/master-slave.inc; --disable_warnings set timestamp=1000000000; drop database if exists mysqltest2; drop database if exists mysqltest3; --enable_warnings create database mysqltest2 character set latin2; set @@character_set_server=latin5; create database mysqltest3; --disable_query_log select "--- --master--" as ""; --enable_query_log show create database mysqltest2; show create database mysqltest3; sync_slave_with_master; --disable_query_log select "--- --slave--" as ""; --enable_query_log show create database mysqltest2; show create database mysqltest3; connection master; set @@collation_server=armscii8_bin; drop database mysqltest3; create database mysqltest3; --disable_query_log select "--- --master--" as ""; --enable_query_log show create database mysqltest3; sync_slave_with_master; --disable_query_log select "--- --slave--" as ""; --enable_query_log show create database mysqltest3; connection master; use mysqltest2; create table t1 (a int auto_increment primary key, b varchar(100)); set character_set_client=cp850, collation_connection=latin2_croatian_ci; insert into t1 (b) values(@@character_set_server); insert into t1 (b) values(@@collation_server); # character_set_database and collation_database are not tested as they # needn't be replicated (Bar said in Jan 2005). insert into t1 (b) values(@@character_set_client); # collation_client does not exist insert into t1 (b) values(@@character_set_connection); insert into t1 (b) values(@@collation_connection); --disable_query_log select "--- --master--" as ""; --enable_query_log select * from t1 order by a; sync_slave_with_master; --disable_query_log select "--- --slave--" as ""; --enable_query_log select * from mysqltest2.t1 order by a; connection master; set character_set_client=latin1, collation_connection=latin1_german1_ci; truncate table t1; insert into t1 (b) values(@@collation_connection); insert into t1 (b) values(LEAST("Müller","Muffler")); set collation_connection=latin1_german2_ci; insert into t1 (b) values(@@collation_connection); insert into t1 (b) values(LEAST("Müller","Muffler")); --disable_query_log select "--- --master--" as ""; --enable_query_log select * from t1 order by a; sync_slave_with_master; --disable_query_log select "--- --slave--" as ""; --enable_query_log select * from mysqltest2.t1 order by a; # Presently charset info is not logged with LOAD DATA but it will # change in Jan 2005 when Dmitri pushes his new LOAD DATA, # before 5.0.3 goes out. When done, LOAD DATA INFILE should be tested # here. # See if user var is prefixed with collation in binlog and replicated well. # Note: replication of user variables is broken as far as derivation is # concerned. That's because when we store a user variable in the binlog, # we lose its derivation. So later on the slave, it's impossible to # know if the collation was explicit or not, so we use DERIVATION_NONE, # which provokes error messages (like 'Illegal mix of collation') when # we replay the master's INSERT/etc statements. connection master; set @a= _cp850 'Müller' collate cp850_general_ci; truncate table t1; insert into t1 (b) values(collation(@a)); --disable_query_log select "--- --master--" as ""; --enable_query_log select * from t1 order by a; sync_slave_with_master; --disable_query_log select "--- --slave--" as ""; --enable_query_log select * from mysqltest2.t1 order by a; connection master; drop database mysqltest2; drop database mysqltest3; --replace_column 2 # 5 # show binlog events from 98; sync_slave_with_master; # Check that we can change global.collation_server (since 5.0.3) set global character_set_server=latin2; set global character_set_server=latin1; # back connection master; set global character_set_server=latin2; set global character_set_server=latin1; # back # Check that SET ONE_SHOT is really one shot set one_shot @@character_set_server=latin5; set @@max_join_size=1000; select @@character_set_server; select @@character_set_server; set @@character_set_server=latin5; select @@character_set_server; select @@character_set_server; # ONE_SHOT on not charset/collation stuff is not allowed -- error 1382 set one_shot max_join_size=10; # Test of wrong character set numbers; error 1115; set character_set_client=9999999; error 1273; set collation_server=9999998; # This one was contributed by Sergey Petrunia (BUG#3943) use test; CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255)); SET CHARACTER_SET_CLIENT=koi8r, CHARACTER_SET_CONNECTION=cp1251, CHARACTER_SET_RESULTS=koi8r; INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ'); select hex(c1), hex(c2) from t1; sync_slave_with_master; select hex(c1), hex(c2) from t1; connection master; # Let's have a look at generated SETs. --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001 drop table t1; sync_slave_with_master; # # BUG#6676: Derivation of variables must be correct on slave # connection master; create table `t1` ( `pk` varchar(10) not null default '', primary key (`pk`) ) engine=myisam default charset=latin1; set @p=_latin1 'test'; update t1 set pk='test' where pk=@p; drop table t1; sync_slave_with_master; # End of 4.1 tests