# Replication of character sets. # This test will fail if the server/client does not support enough charsets. # Remember that there currently exists # Bug #2326: Charset of table is determined by charset of db only if "USE db;" source include/master-slave.inc; --disable_warnings 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 # are not replicated (Bar said that this variable may be removed shortly). 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; # See if SET ONE_SHOT gets into binlog when LOAD DATA connection master; load data infile '../../std_data/words.dat' into table t1 (b); # 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. 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; show binlog events from 79; sync_slave_with_master; # Check that we can't change global.collation_server error 1105; set global character_set_server=latin2; connection master; error 1105; set global character_set_server=latin2; # 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 1105; 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; # Now test for BUG##5705: SET CHARATER_SET_SERVERetc will be lost if # STOP SLAVE before following query stop slave; delete from t1; change master to master_log_pos=5847; start slave until master_log_file='master-bin.000001', master_log_pos=5983; # Slave is supposed to stop _after_ the INSERT, even though 5983 is # the position of the beginning of the INSERT; after SET slave is not # supposed to increment position. wait_for_slave_to_stop; # When you merge this into 5.0 you will have to adjust positions # above; the first master_log_pos above should be the one of the SET, # the second should be the one of the INSERT. start slave; sync_with_master; select hex(c1), hex(c2) from t1; connection master; 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