mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			185 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 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 ('<27><>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>','<27><>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>');
 | ||
| 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;
 | 
