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