rpl_charset.test 4.66 KB
Newer Older
1 2 3 4 5 6 7 8
# 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
9 10
drop database if exists mysqltest2;
drop database if exists mysqltest3;
11 12
--enable_warnings

13
create database mysqltest2 character set latin2;
14
set @@character_set_server=latin5;      
15
create database mysqltest3;
16 17 18
--disable_query_log
select "--- --master--" as "";
--enable_query_log
19 20
show create database mysqltest2;
show create database mysqltest3;
21 22 23 24
sync_slave_with_master;
--disable_query_log
select "--- --slave--" as "";
--enable_query_log
25 26
show create database mysqltest2;
show create database mysqltest3;
27 28

connection master;
29
set @@collation_server=armscii8_bin;
30 31
drop database mysqltest3;
create database mysqltest3;
32 33 34
--disable_query_log
select "--- --master--" as "";
--enable_query_log
35
show create database mysqltest3;
36 37 38 39
sync_slave_with_master;
--disable_query_log
select "--- --slave--" as "";
--enable_query_log
40
show create database mysqltest3;
41 42

connection master;
43
use mysqltest2;
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
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
62
select * from mysqltest2.t1 order by a;
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

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("Mller","Muffler"));
set collation_connection=latin1_german2_ci;
insert into t1 (b) values(@@collation_connection);
insert into t1 (b) values(LEAST("Mller","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
80
select * from mysqltest2.t1 order by a;
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

# 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 'Mller' 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
104
select * from mysqltest2.t1 order by a;
105 106

connection master;
107 108
drop database mysqltest2;
drop database mysqltest3;
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
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;
connection master;
drop table t1;
sync_slave_with_master;