1
2 #Get deafult engine value
3--let $DEFAULT_ENGINE = `select @@global.default_storage_engine`
4
5--disable_warnings
6DROP TABLE IF EXISTS t1;
7DROP TABLE IF EXISTS t2;
8--enable_warnings
9
10CREATE TABLE t1 (
11  latin1_f CHAR(32) CHARACTER SET latin1 NOT NULL
12);
13
14--error 1253
15CREATE TABLE t2 (
16  latin1_f CHAR(32) CHARACTER SET latin1 COLLATE koi8r_general_ci NOT NULL
17);
18
19--error 1273
20CREATE TABLE t2 (
21  latin1_f CHAR(32) CHARACTER SET latin1 COLLATE some_non_existing_col NOT NULL
22);
23
24
25INSERT INTO t1 (latin1_f) VALUES (_latin1'A');
26INSERT INTO t1 (latin1_f) VALUES (_latin1'a');
27
28INSERT INTO t1 (latin1_f) VALUES (_latin1'AD');
29INSERT INTO t1 (latin1_f) VALUES (_latin1'ad');
30
31INSERT INTO t1 (latin1_f) VALUES (_latin1'AE');
32INSERT INTO t1 (latin1_f) VALUES (_latin1'ae');
33
34INSERT INTO t1 (latin1_f) VALUES (_latin1'AF');
35INSERT INTO t1 (latin1_f) VALUES (_latin1'af');
36
37INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
38INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
39
40INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
41INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
42
43INSERT INTO t1 (latin1_f) VALUES (_latin1'B');
44INSERT INTO t1 (latin1_f) VALUES (_latin1'b');
45
46INSERT INTO t1 (latin1_f) VALUES (_latin1'U');
47INSERT INTO t1 (latin1_f) VALUES (_latin1'u');
48
49INSERT INTO t1 (latin1_f) VALUES (_latin1'UE');
50INSERT INTO t1 (latin1_f) VALUES (_latin1'ue');
51
52INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
53INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
54
55INSERT INTO t1 (latin1_f) VALUES (_latin1'SS');
56INSERT INTO t1 (latin1_f) VALUES (_latin1'ss');
57INSERT INTO t1 (latin1_f) VALUES (_latin1'�');
58
59INSERT INTO t1 (latin1_f) VALUES (_latin1'Y');
60INSERT INTO t1 (latin1_f) VALUES (_latin1'y');
61
62INSERT INTO t1 (latin1_f) VALUES (_latin1'Z');
63INSERT INTO t1 (latin1_f) VALUES (_latin1'z');
64
65
66# ORDER BY
67
68SELECT latin1_f FROM t1 ORDER BY latin1_f, hex(latin1_f);
69SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_swedish_ci, hex(latin1_f);
70SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_german2_ci, hex(latin1_f);
71SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_general_ci, hex(latin1_f);
72SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_bin;
73--error 1253
74SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE koi8r_general_ci;
75
76# SELECT latin1_f COLLATE koi8r FROM t1 ;
77
78# AS + ORDER BY
79SELECT latin1_f COLLATE latin1_swedish_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as, hex(latin1_f_as);
80SELECT latin1_f COLLATE latin1_german2_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as, hex(latin1_f_as);
81SELECT latin1_f COLLATE latin1_general_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as, hex(latin1_f_as);
82SELECT latin1_f COLLATE latin1_bin        AS latin1_f_as FROM t1 ORDER BY latin1_f_as;
83--error 1253
84SELECT latin1_f COLLATE koi8r_general_ci  AS latin1_f_as FROM t1 ORDER BY latin1_f_as;
85
86
87# GROUP BY
88
89SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f;
90--source include/turn_off_only_full_group_by.inc
91SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_swedish_ci;
92SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_german2_ci;
93SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_general_ci;
94SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_bin;
95--error 1253
96SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE koi8r_general_ci;
97--source include/restore_sql_mode_after_turn_off_only_full_group_by.inc
98
99# DISTINCT
100
101SELECT DISTINCT latin1_f                           FROM t1;
102SELECT DISTINCT latin1_f COLLATE latin1_swedish_ci FROM t1;
103SELECT DISTINCT latin1_f COLLATE latin1_german2_ci FROM t1;
104SELECT DISTINCT latin1_f COLLATE latin1_general_ci FROM t1;
105SELECT DISTINCT latin1_f COLLATE latin1_bin        FROM t1;
106--error 1273
107SELECT DISTINCT latin1_f COLLATE koi8r             FROM t1;
108
109
110# Aggregates
111
112--disable_parsing
113SELECT MAX(k COLLATE latin1_german2_ci)
114FROM t1
115WHERE
116SELECT *
117FROM t1
118WHERE (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k
119HAVING
120SELECT *
121FROM t1
122HAVING (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k;
123--enable_parsing
124
125#
126# Check that SHOW displays COLLATE clause
127#
128
129
130#Replace default engine value with static engine string
131--replace_result $DEFAULT_ENGINE ENGINE
132SHOW CREATE TABLE t1;
133SHOW FIELDS FROM  t1;
134ALTER TABLE t1 CHANGE latin1_f
135latin1_f CHAR(32) CHARACTER SET latin1 COLLATE latin1_bin;
136
137#Replace default engine value with static engine string
138--replace_result $DEFAULT_ENGINE ENGINE
139SHOW CREATE TABLE t1;
140SHOW FIELDS FROM  t1;
141ALTER TABLE t1 CHARACTER SET latin1 COLLATE latin1_bin;
142
143#Replace default engine value with static engine string
144--replace_result $DEFAULT_ENGINE ENGINE
145SHOW CREATE TABLE t1;
146SHOW FIELDS FROM  t1;
147
148#
149# Check SET CHARACTER SET
150#
151
152SET CHARACTER SET 'latin1';
153SHOW VARIABLES LIKE 'character_set_client';
154SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
155explain extended SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
156
157SET CHARACTER SET koi8r;
158SHOW VARIABLES LIKE 'collation_client';
159SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
160
161--error 1115
162SET CHARACTER SET 'DEFAULT';
163
164DROP TABLE t1;
165
166CREATE TABLE t1
167(s1 CHAR(5) COLLATE latin1_german1_ci,
168 s2 CHAR(5) COLLATE latin1_swedish_ci);
169--error 1267
170SELECT * FROM t1 WHERE s1 = s2;
171DROP TABLE t1;
172
173
174CREATE TABLE t1
175(s1 CHAR(5) COLLATE latin1_german1_ci,
176 s2 CHAR(5) COLLATE latin1_swedish_ci,
177 s3 CHAR(5) COLLATE latin1_bin);
178INSERT INTO t1 VALUES ('a','A','A');
179--error 1267
180SELECT * FROM t1 WHERE s1 = s2;
181SELECT * FROM t1 WHERE s1 = s3;
182SELECT * FROM t1 WHERE s2 = s3;
183DROP TABLE t1;
184
185
186#
187# Test that optimizer doesn't use indexes with wrong collation
188#
189#
190# BUG#48447, Delivering too few records with indexes using collate syntax
191#
192create table t1 (a varchar(1) character set latin1 collate latin1_general_ci);
193insert into t1 values ('A'),('a'),('B'),('b'),('C'),('c');
194select * from t1 where a > 'B' collate latin1_bin;
195select * from t1 where a <> 'B' collate latin1_bin;
196create index i on t1 (a);
197select * from t1 where a > 'B' collate latin1_bin;
198select * from t1 where a <> 'B' collate latin1_bin;
199drop table t1;
200
201SET NAMES latin1;
202CREATE TABLE t1
203(s1 char(10) COLLATE latin1_german1_ci,
204 s2 char(10) COLLATE latin1_swedish_ci,
205 KEY(s1),
206 KEY(s2));
207
208INSERT INTO t1 VALUES ('a','a');
209INSERT INTO t1 VALUES ('b','b');
210INSERT INTO t1 VALUES ('c','c');
211INSERT INTO t1 VALUES ('d','d');
212INSERT INTO t1 VALUES ('e','e');
213INSERT INTO t1 VALUES ('f','f');
214INSERT INTO t1 VALUES ('g','g');
215INSERT INTO t1 VALUES ('h','h');
216INSERT INTO t1 VALUES ('i','i');
217INSERT INTO t1 VALUES ('j','j');
218
219ANALYZE TABLE t1;
220EXPLAIN SELECT * FROM t1 WHERE s1='a';
221EXPLAIN SELECT * FROM t1 WHERE s2='a';
222EXPLAIN SELECT * FROM t1 WHERE s1='a' COLLATE latin1_german1_ci;
223--replace_result 11 10 9.09 10.00
224EXPLAIN SELECT * FROM t1 WHERE s2='a' COLLATE latin1_german1_ci;
225
226EXPLAIN SELECT * FROM t1 WHERE s1 BETWEEN 'a' AND 'b' COLLATE latin1_german1_ci;
227--replace_result 11 10
228EXPLAIN SELECT * FROM t1 WHERE s2 BETWEEN 'a' AND 'b' COLLATE latin1_german1_ci;
229
230EXPLAIN SELECT * FROM t1 WHERE s1 IN  ('a','b' COLLATE latin1_german1_ci);
231--replace_result 11 10 18.18 20.00 3.31 4.00
232EXPLAIN SELECT * FROM t1 WHERE s2 IN  ('a','b' COLLATE latin1_german1_ci);
233
234EXPLAIN SELECT * FROM t1 WHERE s1 LIKE 'a' COLLATE latin1_german1_ci;
235--replace_result 11 10
236EXPLAIN SELECT * FROM t1 WHERE s2 LIKE 'a' COLLATE latin1_german1_ci;
237
238DROP TABLE t1;
239
240# End of 4.1 tests
241
242#
243# Bug#29261: Sort order of the collation wasn't used when comparing trailing
244#            spaces.
245#
246create table t1(f1 varchar(10) character set latin2 collate latin2_hungarian_ci, key(f1));
247insert into t1 set f1=0x3F3F9DC73F;
248insert into t1 set f1=0x3F3F1E563F;
249insert into t1 set f1=0x3F3F;
250check table t1 extended;
251drop table t1;
252
253#
254# Bug#29461: Sort order of the collation wasn't used when comparing characters
255#            with the space character.
256#
257create table t1 (a varchar(2) character set latin7 collate latin7_general_ci,key(a));
258insert into t1 set a=0x4c20;
259insert into t1 set a=0x6c;
260insert into t1 set a=0x4c98;
261check table t1 extended;
262drop table t1;
263
264#
265# Bug#41627 Illegal mix of collations in LEAST / GREATEST / CASE
266#
267SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
268select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
269create table t1
270select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci) as f1;
271
272#Replace default engine value with static engine string
273--replace_result $DEFAULT_ENGINE ENGINE
274show create table t1;
275drop table t1;
276
277select case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
278latin5_turkish_ci then 2 else 3 end;
279
280select concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
281SET sql_mode = default;
282
283--echo #
284--echo # Bug#11765016 57926: ILLEGAL MIX OF COLLATIONS FOR OPERATION 'UNION' .. USING CONCAT/FUNCTION/
285--echo # Not a bug: only adding coverage tests
286--echo #
287SET NAMES latin1 COLLATE latin1_german2_ci;
288CREATE DATABASE test1 DEFAULT CHARACTER SET latin1 COLLATE latin1_german2_ci;
289USE test1;
290DELIMITER //;
291--echo #
292--echo # Using "COLLATE latin1_swedish_ci" as the default collation for latin1
293--echo #
294CREATE FUNCTION `getText`() RETURNS varchar(20) CHARSET latin1
295BEGIN
296  RETURN "Testtext";
297END;//
298DELIMITER ;//
299SELECT getText(), CHARSET(getText()), COLLATION(getText()), COERCIBILITY(getText());
300--error ER_CANT_AGGREGATE_NCOLLATIONS
301CREATE TABLE t1 AS SELECT ' - ' AS a UNION SELECT getText();
302DROP FUNCTION getText;
303--echo #
304--echo # Using "CHARACTER SET latin1 COLLATE latin1_german2_ci" as the database defaults
305--echo #
306DELIMITER //;
307CREATE FUNCTION `getText`() RETURNS varchar(20)
308BEGIN
309  RETURN "Testtext";
310END;//
311DELIMITER ;//
312SELECT getText(), CHARSET(getText()), COLLATION(getText()), COERCIBILITY(getText());
313CREATE TABLE t1 AS SELECT ' - ' AS a UNION SELECT getText();
314
315#Replace default engine value with static engine string
316--replace_result $DEFAULT_ENGINE ENGINE
317SHOW CREATE TABLE t1;
318DROP TABLE t1;
319DROP FUNCTION getText;
320--echo #
321--echo # Using explicit "CHARACTER SET latin1 COLLATE latin1_german2_ci"
322--echo #
323DELIMITER //;
324CREATE FUNCTION `getText`() RETURNS varchar(20) CHARACTER SET latin1 COLLATE latin1_german2_ci
325BEGIN
326  RETURN "Testtext";
327END;//
328DELIMITER ;//
329SELECT getText(), CHARSET(getText()), COLLATION(getText()), COERCIBILITY(getText());
330CREATE TABLE t1 AS SELECT ' - ' AS a UNION SELECT getText();
331
332#Replace default engine value with static engine string
333--replace_result $DEFAULT_ENGINE ENGINE
334SHOW CREATE TABLE t1;
335DROP TABLE t1;
336DROP FUNCTION getText;
337DROP DATABASE test1;
338USE test;
339SET NAMES latin1;
340
341--echo # Bug#20425399: CAN'T USE COLLATE
342CREATE TABLE t1(a TINYINT, b SMALLINT, c MEDIUMINT, d INT, e BIGINT);
343CREATE TABLE t2(a DECIMAL(5,2));
344CREATE TABLE t3(a FLOAT(5,2), b DOUBLE(5,2));
345INSERT INTO t1 VALUES(1, 2, 3, 4, 100);
346INSERT INTO t1 VALUES(2, 3, 4, 100, 1);
347INSERT INTO t1 VALUES(3, 4, 100, 1, 2);
348INSERT INTO t1 VALUES(4, 100, 1, 2, 3);
349INSERT INTO t1 VALUES(100, 1, 2, 3, 4);
350SELECT * FROM t1 ORDER BY a;
351SELECT * FROM t1 ORDER BY a COLLATE utf8_bin;
352SELECT * FROM t1 ORDER BY b;
353SELECT * FROM t1 ORDER BY b COLLATE latin1_swedish_ci;
354SELECT * FROM t1 ORDER BY c;
355SELECT * FROM t1 ORDER BY c COLLATE gb2312_chinese_ci;
356SELECT * FROM t1 ORDER BY d;
357SELECT * FROM t1 ORDER BY d COLLATE ascii_general_ci;
358INSERT INTO t2 VALUES(1.01);
359INSERT INTO t2 VALUES(2.99);
360INSERT INTO t2 VALUES(100.49);
361SELECT * FROM t2 ORDER BY a;
362SELECT * FROM t2 ORDER BY a COLLATE latin1_german1_ci;
363INSERT INTO t3 VALUES(1.01, 2.99);
364INSERT INTO t3 VALUES(2.99, 100.49);
365INSERT INTO t3 VALUES(100.49, 1.01);
366SELECT * FROM t3 ORDER BY a;
367SELECT * FROM t3 ORDER BY a COLLATE ascii_bin;
368SELECT * FROM t3 ORDER BY b;
369SELECT * FROM t3 ORDER BY b COLLATE utf8_general_ci;
370DROP TABLE t1;
371DROP TABLE t2;
372DROP TABLE t3;
373