1
# Replication of character sets.
2
# This test will fail if the server/client does not support enough charsets.
4
# Requires statement logging
5
-- source include/have_binlog_format_mixed_or_statement.inc
7
source include/master-slave.inc;
9
set timestamp=1000000000;
10
drop database if exists mysqltest2;
11
drop database if exists mysqltest3;
14
create database mysqltest2 character set latin2;
15
set @@character_set_server=latin5;
16
create database mysqltest3;
18
select "--- --master--" as "";
20
show create database mysqltest2;
21
show create database mysqltest3;
22
sync_slave_with_master;
24
select "--- --slave--" as "";
26
show create database mysqltest2;
27
show create database mysqltest3;
30
set @@collation_server=armscii8_bin;
31
drop database mysqltest3;
32
create database mysqltest3;
34
select "--- --master--" as "";
36
show create database mysqltest3;
37
sync_slave_with_master;
39
select "--- --slave--" as "";
41
show create database mysqltest3;
45
create table t1 (a int auto_increment primary key, b varchar(100));
46
set character_set_client=cp850, collation_connection=latin2_croatian_ci;
47
insert into t1 (b) values(@@character_set_server);
48
insert into t1 (b) values(@@collation_server);
49
# character_set_database and collation_database are not tested as they
50
# needn't be replicated (Bar said in Jan 2005).
51
insert into t1 (b) values(@@character_set_client);
52
# collation_client does not exist
53
insert into t1 (b) values(@@character_set_connection);
54
insert into t1 (b) values(@@collation_connection);
56
select "--- --master--" as "";
58
select * from t1 order by a;
59
sync_slave_with_master;
61
select "--- --slave--" as "";
63
select * from mysqltest2.t1 order by a;
66
set character_set_client=latin1, collation_connection=latin1_german1_ci;
68
insert into t1 (b) values(@@collation_connection);
69
insert into t1 (b) values(LEAST("M�ller","Muffler"));
70
set collation_connection=latin1_german2_ci;
71
insert into t1 (b) values(@@collation_connection);
72
insert into t1 (b) values(LEAST("M�ller","Muffler"));
74
select "--- --master--" as "";
76
select * from t1 order by a;
77
sync_slave_with_master;
79
select "--- --slave--" as "";
81
select * from mysqltest2.t1 order by a;
83
# Presently charset info is not logged with LOAD DATA but it will
84
# change in Jan 2005 when Dmitri pushes his new LOAD DATA,
85
# before 5.0.3 goes out. When done, LOAD DATA INFILE should be tested
88
# See if user var is prefixed with collation in binlog and replicated well.
89
# Note: replication of user variables is broken as far as derivation is
90
# concerned. That's because when we store a user variable in the binlog,
91
# we lose its derivation. So later on the slave, it's impossible to
92
# know if the collation was explicit or not, so we use DERIVATION_NONE,
93
# which provokes error messages (like 'Illegal mix of collation') when
94
# we replay the master's INSERT/etc statements.
96
set @a= _cp850 'M�ller' collate cp850_general_ci;
98
insert into t1 (b) values(collation(@a));
100
select "--- --master--" as "";
102
select * from t1 order by a;
103
sync_slave_with_master;
105
select "--- --slave--" as "";
107
select * from mysqltest2.t1 order by a;
110
drop database mysqltest2;
111
drop database mysqltest3;
112
--replace_column 2 # 5 #
113
--replace_regex /table_id: [0-9]+/table_id: #/
114
show binlog events from 102;
115
sync_slave_with_master;
117
# Check that we can change global.collation_server (since 5.0.3)
119
set global character_set_server=latin2;
120
set global character_set_server=latin1; # back
122
set global character_set_server=latin2;
123
set global character_set_server=latin1; # back
125
# Check that SET ONE_SHOT is really one shot
127
set one_shot @@character_set_server=latin5;
128
set @@max_join_size=1000;
129
select @@character_set_server;
130
select @@character_set_server;
131
set @@character_set_server=latin5;
132
select @@character_set_server;
133
select @@character_set_server;
135
# ONE_SHOT on not charset/collation stuff is not allowed
137
set one_shot max_join_size=10;
139
# Test of wrong character set numbers;
141
set character_set_client=9999999;
143
set collation_server=9999998;
145
# This one was contributed by Sergey Petrunia (BUG#3943)
148
CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
149
SET CHARACTER_SET_CLIENT=koi8r,
150
CHARACTER_SET_CONNECTION=cp1251,
151
CHARACTER_SET_RESULTS=koi8r;
152
INSERT INTO t1 (c1, c2) VALUES ('��, �� �������','��, �� �������');
153
select hex(c1), hex(c2) from t1;
154
sync_slave_with_master;
155
select hex(c1), hex(c2) from t1;
158
# Let's have a look at generated SETs.
160
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
161
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
163
sync_slave_with_master;
166
# BUG#6676: Derivation of variables must be correct on slave
169
eval create table `t1` (
170
`pk` varchar(10) not null default '',
172
) engine=$engine_type default charset=latin1;
173
set @p=_latin1 'test';
174
update t1 set pk='test' where pk=@p;
176
sync_slave_with_master;