# # Start of 10.2 tests # # # MDEV-10877 xxx_unicode_nopad_ci collations # SET NAMES utf8; SET DEFAULT_STORAGE_ENGINE=MyISAM; # # Start of ctype_pad.inc # # # Unique indexes # CREATE TABLE t1 (a VARCHAR(10) PRIMARY KEY) COLLATE 'utf8_unicode_nopad_ci'; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) NOT NULL, PRIMARY KEY (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_nopad_ci INSERT INTO t1 VALUES ('abc'),('abc '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM t1 ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a DESC; HEX(a) a 6162632020 abc 616263 abc 61202020 a 206120 a 2061 a # # UNION # CREATE TABLE t2 (a VARCHAR(10)) COLLATE 'utf8_unicode_nopad_ci'; INSERT INTO t2 VALUES ('abc '),('abc '),(' a'),('a '); SELECT HEX(a),a FROM (SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY a) td; HEX(a) a 2061 a 206120 a 6120 a 61202020 a 616263 abc 61626320 abc 6162632020 abc DROP TABLE t1; DROP TABLE t2; # # DISTINCT, COUNT, MAX # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_nopad_ci'; INSERT INTO t1 VALUES ('a'),('a '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM (SELECT DISTINCT a FROM t1 ORDER BY a) td; HEX(a) a 2061 a 206120 a 61 a 612020 a 61202020 a SELECT COUNT(DISTINCT a) FROM t1 ORDER BY a; COUNT(DISTINCT a) 5 SELECT HEX(MAX(a)), MAX(a) FROM t1; HEX(MAX(a)) MAX(a) 61202020 a # # GROUP BY # CREATE TABLE t2 (a VARCHAR(10), b int, c varchar(10)) COLLATE 'utf8_unicode_nopad_ci'; INSERT t2 values('ab', 12, 'cd'), ('ab', 2, 'ed'), ('aa', 20, 'er'), ('aa ', 0, 'er '); SELECT HEX(a), cnt FROM (SELECT a, COUNT(a) AS cnt FROM t2 GROUP BY a ORDER BY a) AS td; HEX(a) cnt 6161 1 61612020 1 6162 2 DROP TABLE t2; # # Weights # SELECT HEX(WEIGHT_STRING(a AS CHAR(10))) FROM t1; HEX(WEIGHT_STRING(a AS CHAR(10))) 0E33020002000200020002000200020002000200 0E33020902090200020002000200020002000200 02090E3302000200020002000200020002000200 02090E3302090200020002000200020002000200 0E33020902090209020002000200020002000200 DROP TABLE t1; # # IF, CASE, LEAST # SELECT IF('abc' COLLATE 'utf8_unicode_nopad_ci' = 'abc ', 'pad', 'nopad') as exp; exp nopad SELECT CASE 'abc' COLLATE 'utf8_unicode_nopad_ci' WHEN 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT CASE WHEN 'abc' COLLATE 'utf8_unicode_nopad_ci' = 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT HEX(LEAST('abc ' COLLATE 'utf8_unicode_nopad_ci', 'abc ')) as exp; exp 61626320 SELECT HEX(GREATEST('abc ' COLLATE 'utf8_unicode_nopad_ci', 'abc ')) as exp; exp 6162632020 # # Collation mix # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_ci'; INSERT INTO t1 VALUES ('a'),('a '); SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_nopad_ci'; COUNT(*) 1 ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE 'utf8_unicode_nopad_ci'; SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 1 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_nopad_ci'; COUNT(*) 1 DROP TABLE t1; # # End of ctype_pad.inc # SET DEFAULT_STORAGE_ENGINE=HEAP; # # Start of ctype_pad.inc # # # Unique indexes # CREATE TABLE t1 (a VARCHAR(10) PRIMARY KEY) COLLATE 'utf8_unicode_nopad_ci'; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) NOT NULL, PRIMARY KEY (`a`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_nopad_ci INSERT INTO t1 VALUES ('abc'),('abc '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM t1 ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a DESC; HEX(a) a 6162632020 abc 616263 abc 61202020 a 206120 a 2061 a # # UNION # CREATE TABLE t2 (a VARCHAR(10)) COLLATE 'utf8_unicode_nopad_ci'; INSERT INTO t2 VALUES ('abc '),('abc '),(' a'),('a '); SELECT HEX(a),a FROM (SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY a) td; HEX(a) a 2061 a 206120 a 6120 a 61202020 a 616263 abc 61626320 abc 6162632020 abc DROP TABLE t1; DROP TABLE t2; # # DISTINCT, COUNT, MAX # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_nopad_ci'; INSERT INTO t1 VALUES ('a'),('a '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM (SELECT DISTINCT a FROM t1 ORDER BY a) td; HEX(a) a 2061 a 206120 a 61 a 612020 a 61202020 a SELECT COUNT(DISTINCT a) FROM t1 ORDER BY a; COUNT(DISTINCT a) 5 SELECT HEX(MAX(a)), MAX(a) FROM t1; HEX(MAX(a)) MAX(a) 61202020 a # # GROUP BY # CREATE TABLE t2 (a VARCHAR(10), b int, c varchar(10)) COLLATE 'utf8_unicode_nopad_ci'; INSERT t2 values('ab', 12, 'cd'), ('ab', 2, 'ed'), ('aa', 20, 'er'), ('aa ', 0, 'er '); SELECT HEX(a), cnt FROM (SELECT a, COUNT(a) AS cnt FROM t2 GROUP BY a ORDER BY a) AS td; HEX(a) cnt 6161 1 61612020 1 6162 2 DROP TABLE t2; # # Weights # SELECT HEX(WEIGHT_STRING(a AS CHAR(10))) FROM t1; HEX(WEIGHT_STRING(a AS CHAR(10))) 0E33020002000200020002000200020002000200 0E33020902090200020002000200020002000200 02090E3302000200020002000200020002000200 02090E3302090200020002000200020002000200 0E33020902090209020002000200020002000200 DROP TABLE t1; # # IF, CASE, LEAST # SELECT IF('abc' COLLATE 'utf8_unicode_nopad_ci' = 'abc ', 'pad', 'nopad') as exp; exp nopad SELECT CASE 'abc' COLLATE 'utf8_unicode_nopad_ci' WHEN 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT CASE WHEN 'abc' COLLATE 'utf8_unicode_nopad_ci' = 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT HEX(LEAST('abc ' COLLATE 'utf8_unicode_nopad_ci', 'abc ')) as exp; exp 61626320 SELECT HEX(GREATEST('abc ' COLLATE 'utf8_unicode_nopad_ci', 'abc ')) as exp; exp 6162632020 # # Collation mix # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_ci'; INSERT INTO t1 VALUES ('a'),('a '); SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_nopad_ci'; COUNT(*) 1 ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE 'utf8_unicode_nopad_ci'; SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 1 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_nopad_ci'; COUNT(*) 1 DROP TABLE t1; # # End of ctype_pad.inc # SET DEFAULT_STORAGE_ENGINE=Default; SET DEFAULT_STORAGE_ENGINE=MyISAM; # # Start of ctype_pad.inc # # # Unique indexes # CREATE TABLE t1 (a VARCHAR(10) PRIMARY KEY) COLLATE 'utf8_unicode_520_nopad_ci'; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) NOT NULL, PRIMARY KEY (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_520_nopad_ci INSERT INTO t1 VALUES ('abc'),('abc '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM t1 ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a DESC; HEX(a) a 6162632020 abc 616263 abc 61202020 a 206120 a 2061 a # # UNION # CREATE TABLE t2 (a VARCHAR(10)) COLLATE 'utf8_unicode_520_nopad_ci'; INSERT INTO t2 VALUES ('abc '),('abc '),(' a'),('a '); SELECT HEX(a),a FROM (SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY a) td; HEX(a) a 2061 a 206120 a 6120 a 61202020 a 616263 abc 61626320 abc 6162632020 abc DROP TABLE t1; DROP TABLE t2; # # DISTINCT, COUNT, MAX # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_520_nopad_ci'; INSERT INTO t1 VALUES ('a'),('a '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM (SELECT DISTINCT a FROM t1 ORDER BY a) td; HEX(a) a 2061 a 206120 a 61 a 612020 a 61202020 a SELECT COUNT(DISTINCT a) FROM t1 ORDER BY a; COUNT(DISTINCT a) 5 SELECT HEX(MAX(a)), MAX(a) FROM t1; HEX(MAX(a)) MAX(a) 61202020 a # # GROUP BY # CREATE TABLE t2 (a VARCHAR(10), b int, c varchar(10)) COLLATE 'utf8_unicode_520_nopad_ci'; INSERT t2 values('ab', 12, 'cd'), ('ab', 2, 'ed'), ('aa', 20, 'er'), ('aa ', 0, 'er '); SELECT HEX(a), cnt FROM (SELECT a, COUNT(a) AS cnt FROM t2 GROUP BY a ORDER BY a) AS td; HEX(a) cnt 6161 1 61612020 1 6162 2 DROP TABLE t2; # # Weights # SELECT HEX(WEIGHT_STRING(a AS CHAR(10))) FROM t1; HEX(WEIGHT_STRING(a AS CHAR(10))) 120F020002000200020002000200020002000200 120F020A020A0200020002000200020002000200 020A120F02000200020002000200020002000200 020A120F020A0200020002000200020002000200 120F020A020A020A020002000200020002000200 DROP TABLE t1; # # IF, CASE, LEAST # SELECT IF('abc' COLLATE 'utf8_unicode_520_nopad_ci' = 'abc ', 'pad', 'nopad') as exp; exp nopad SELECT CASE 'abc' COLLATE 'utf8_unicode_520_nopad_ci' WHEN 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT CASE WHEN 'abc' COLLATE 'utf8_unicode_520_nopad_ci' = 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT HEX(LEAST('abc ' COLLATE 'utf8_unicode_520_nopad_ci', 'abc ')) as exp; exp 61626320 SELECT HEX(GREATEST('abc ' COLLATE 'utf8_unicode_520_nopad_ci', 'abc ')) as exp; exp 6162632020 # # Collation mix # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_520_ci'; INSERT INTO t1 VALUES ('a'),('a '); SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_nopad_ci'; COUNT(*) 1 ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE 'utf8_unicode_520_nopad_ci'; SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 1 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_nopad_ci'; COUNT(*) 1 DROP TABLE t1; # # End of ctype_pad.inc # SET DEFAULT_STORAGE_ENGINE=HEAP; # # Start of ctype_pad.inc # # # Unique indexes # CREATE TABLE t1 (a VARCHAR(10) PRIMARY KEY) COLLATE 'utf8_unicode_520_nopad_ci'; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) NOT NULL, PRIMARY KEY (`a`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_520_nopad_ci INSERT INTO t1 VALUES ('abc'),('abc '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM t1 ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a; HEX(a) a 2061 a 206120 a 61202020 a 616263 abc 6162632020 abc SELECT HEX(a), a FROM t1 IGNORE INDEX(PRIMARY) ORDER BY a DESC; HEX(a) a 6162632020 abc 616263 abc 61202020 a 206120 a 2061 a # # UNION # CREATE TABLE t2 (a VARCHAR(10)) COLLATE 'utf8_unicode_520_nopad_ci'; INSERT INTO t2 VALUES ('abc '),('abc '),(' a'),('a '); SELECT HEX(a),a FROM (SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY a) td; HEX(a) a 2061 a 206120 a 6120 a 61202020 a 616263 abc 61626320 abc 6162632020 abc DROP TABLE t1; DROP TABLE t2; # # DISTINCT, COUNT, MAX # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_520_nopad_ci'; INSERT INTO t1 VALUES ('a'),('a '),(' a'),(' a '),('a '); SELECT HEX(a), a FROM (SELECT DISTINCT a FROM t1 ORDER BY a) td; HEX(a) a 2061 a 206120 a 61 a 612020 a 61202020 a SELECT COUNT(DISTINCT a) FROM t1 ORDER BY a; COUNT(DISTINCT a) 5 SELECT HEX(MAX(a)), MAX(a) FROM t1; HEX(MAX(a)) MAX(a) 61202020 a # # GROUP BY # CREATE TABLE t2 (a VARCHAR(10), b int, c varchar(10)) COLLATE 'utf8_unicode_520_nopad_ci'; INSERT t2 values('ab', 12, 'cd'), ('ab', 2, 'ed'), ('aa', 20, 'er'), ('aa ', 0, 'er '); SELECT HEX(a), cnt FROM (SELECT a, COUNT(a) AS cnt FROM t2 GROUP BY a ORDER BY a) AS td; HEX(a) cnt 6161 1 61612020 1 6162 2 DROP TABLE t2; # # Weights # SELECT HEX(WEIGHT_STRING(a AS CHAR(10))) FROM t1; HEX(WEIGHT_STRING(a AS CHAR(10))) 120F020002000200020002000200020002000200 120F020A020A0200020002000200020002000200 020A120F02000200020002000200020002000200 020A120F020A0200020002000200020002000200 120F020A020A020A020002000200020002000200 DROP TABLE t1; # # IF, CASE, LEAST # SELECT IF('abc' COLLATE 'utf8_unicode_520_nopad_ci' = 'abc ', 'pad', 'nopad') as exp; exp nopad SELECT CASE 'abc' COLLATE 'utf8_unicode_520_nopad_ci' WHEN 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT CASE WHEN 'abc' COLLATE 'utf8_unicode_520_nopad_ci' = 'abc ' THEN 'pad' ELSE 'nopad' END as exp; exp nopad SELECT HEX(LEAST('abc ' COLLATE 'utf8_unicode_520_nopad_ci', 'abc ')) as exp; exp 61626320 SELECT HEX(GREATEST('abc ' COLLATE 'utf8_unicode_520_nopad_ci', 'abc ')) as exp; exp 6162632020 # # Collation mix # CREATE TABLE t1 (a VARCHAR(10)) COLLATE 'utf8_unicode_520_ci'; INSERT INTO t1 VALUES ('a'),('a '); SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_nopad_ci'; COUNT(*) 1 ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE 'utf8_unicode_520_nopad_ci'; SELECT COUNT(*) FROM t1 WHERE a='a'; COUNT(*) 1 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_ci'; COUNT(*) 2 SELECT COUNT(*) FROM t1 WHERE a='a' COLLATE 'utf8_unicode_520_nopad_ci'; COUNT(*) 1 DROP TABLE t1; # # End of ctype_pad.inc # SET DEFAULT_STORAGE_ENGINE=Default; SET NAMES utf8 COLLATE utf8_unicode_nopad_ci; # # MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results # CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b; ALTER TABLE t1 ADD KEY(a), ADD KEY(b); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, `b` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, KEY `a` (`a`), KEY `b` (`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('111', '111'); INSERT INTO t1 VALUES ('222', '222'); INSERT INTO t1 VALUES ('333', '333'); INSERT INTO t1 VALUES ('444', '444'); SELECT * FROM t1 WHERE a LIKE '111%'; a b 111 111 SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%'; a b 111 111 DROP TABLE t1; # # End of 10.2 tests # # # Start of 10.3 tests # # # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8 # SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; SHOW CREATE TABLE case_folding; Table Create Table case_folding CREATE TABLE `case_folding` ( `code` int(1) NOT NULL, `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO case_folding (code) VALUES (0x23A), (0x23E), (0x23F), (0x240), (0x250), (0x251), (0x252), (0x26B), (0x271), (0x27D); UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 23A C8BA C8BA Ⱥ 23E C8BE C8BE Ⱦ 23F C8BF C8BF ȿ 240 C980 C980 ɀ 250 C990 C990 ɐ 251 C991 C991 ɑ 252 C992 C992 ɒ 26B C9AB C9AB ɫ 271 C9B1 C9B1 ɱ 27D C9BD C9BD ɽ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; SHOW CREATE TABLE case_folding; Table Create Table case_folding CREATE TABLE `case_folding` ( `code` int(1) NOT NULL, `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_520_ci DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO case_folding (code) VALUES (0x23A), (0x23E), (0x23F), (0x240), (0x250), (0x251), (0x252), (0x26B), (0x271), (0x27D); UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 23A E2B1A5 C8BA Ⱥ 23E E2B1A6 C8BE Ⱦ 23F C8BF E2B1BE ȿ 240 C980 E2B1BF ɀ 250 C990 E2B1AF ɐ 251 C991 E2B1AD ɑ 252 C992 E2B1B0 ɒ 26B C9AB E2B1A2 ɫ 271 C9B1 E2B1AE ɱ 27D C9BD E2B1A4 ɽ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; SHOW CREATE TABLE case_folding; Table Create Table case_folding CREATE TABLE `case_folding` ( `code` int(1) NOT NULL, `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO case_folding (code) VALUES (0x23A), (0x23E), (0x23F), (0x240), (0x250), (0x251), (0x252), (0x26B), (0x271), (0x27D); UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 23A E2B1A5 C8BA Ⱥ 23E E2B1A6 C8BE Ⱦ 23F C8BF E2B1BE ȿ 240 C980 E2B1BF ɀ 250 C990 E2B1AF ɐ 251 C991 E2B1AD ɑ 252 C992 E2B1B0 ɒ 26B C9AB E2B1A2 ɫ 271 C9B1 E2B1AE ɱ 27D C9BD E2B1A4 ɽ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; SHOW CREATE TABLE case_folding; Table Create Table case_folding CREATE TABLE `case_folding` ( `code` int(1) NOT NULL, `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_myanmar_ci DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO case_folding (code) VALUES (0x23A), (0x23E), (0x23F), (0x240), (0x250), (0x251), (0x252), (0x26B), (0x271), (0x27D); UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 23A E2B1A5 C8BA Ⱥ 23E E2B1A6 C8BE Ⱦ 23F C8BF E2B1BE ȿ 240 C980 E2B1BF ɀ 250 C990 E2B1AF ɐ 251 C991 E2B1AD ɑ 252 C992 E2B1B0 ɒ 26B C9AB E2B1A2 ɫ 271 C9B1 E2B1AE ɱ 27D C9BD E2B1A4 ɽ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; SHOW CREATE TABLE case_folding; Table Create Table case_folding CREATE TABLE `case_folding` ( `code` int(1) NOT NULL, `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_thai_520_w2 DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO case_folding (code) VALUES (0x23A), (0x23E), (0x23F), (0x240), (0x250), (0x251), (0x252), (0x26B), (0x271), (0x27D); UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 23A E2B1A5 C8BA Ⱥ 23E E2B1A6 C8BE Ⱦ 23F C8BF E2B1BE ȿ 240 C980 E2B1BF ɀ 250 C990 E2B1AF ɐ 251 C991 E2B1AD ɑ 252 C992 E2B1B0 ɒ 26B C9AB E2B1A2 ɫ 271 C9B1 E2B1AE ɱ 27D C9BD E2B1A4 ɽ DROP TABLE case_folding; # # End of 10.3 tests # # # Start of 10.4 tests # SET DEFAULT_STORAGE_ENGINE=MyISAM; SET NAMES utf8mb3 COLLATE utf8mb3_unicode_nopad_ci; # # MDEV-30034 UNIQUE USING HASH accepts duplicate entries for tricky collations # EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a TEXT COLLATE ,' 'UNIQUE(a(3)))', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; ERROR 23000: Duplicate entry 'ß ' for key 'a' DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a TEXT COLLATE ,' 'UNIQUE(a(3)) USING HASH)', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) USING HASH ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; ERROR 23000: Duplicate entry 'ß ' for key 'a' DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a VARCHAR(2000) COLLATE ,' 'UNIQUE(a(3)))', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; ERROR 23000: Duplicate entry 'ß ' for key 'a' DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a VARCHAR(2000) COLLATE ,' 'UNIQUE(a(3)) USING HASH)', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) USING HASH ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; ERROR 23000: Duplicate entry 'ß ' for key 'a' DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a CHAR(20) COLLATE ,' 'UNIQUE(a(3)))', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a CHAR(20) COLLATE ,' 'UNIQUE(a(3)) USING HASH)', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) USING HASH ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; DROP TABLE t1; SET DEFAULT_STORAGE_ENGINE=HEAP; # # MDEV-30034 UNIQUE USING HASH accepts duplicate entries for tricky collations # EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a VARCHAR(2000) COLLATE ,' 'UNIQUE(a(3)))', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; ERROR 23000: Duplicate entry 'ß ' for key 'a' DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a VARCHAR(2000) COLLATE ,' 'UNIQUE(a(3)) USING HASH)', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) USING HASH ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; ERROR 23000: Duplicate entry 'ß ' for key 'a' DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a CHAR(20) COLLATE ,' 'UNIQUE(a(3)))', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; DROP TABLE t1; EXECUTE IMMEDIATE REPLACE( 'CREATE TABLE t1 ( ' ' a CHAR(20) COLLATE ,' 'UNIQUE(a(3)) USING HASH)', '', @@collation_connection); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(3)) USING HASH ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss '); INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/; DROP TABLE t1; SET DEFAULT_STORAGE_ENGINE=DEFAULT; SET default_storage_engine=MyISAM; # # MDEV-30048 Prefix keys for CHAR work differently for MyISAM vs InnoDB # SET NAMES utf8mb3; CREATE TABLE t1 (a CHAR(10) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a)); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; CREATE TABLE t1 (a CHAR(10) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a(2))); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(2)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; CREATE TABLE t1 (a CHAR(120) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a)); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(120) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; CREATE TABLE t1 (a CHAR(120) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a(100))); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(120) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(100)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; # # MDEV-30050 Inconsistent results of DISTINCT with NOPAD # CREATE TABLE t1 (c CHAR(100) COLLATE utf8mb3_unicode_nopad_ci); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `c` char(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); SET big_tables=0; Warnings: Warning 1287 '@@big_tables' is deprecated and will be removed in a future release SELECT DISTINCT c FROM t1; c ss ß SET big_tables=1; Warnings: Warning 1287 '@@big_tables' is deprecated and will be removed in a future release SELECT DISTINCT c FROM t1; c ss ß DROP TABLE t1; SET big_tables=DEFAULT; Warnings: Warning 1287 '@@big_tables' is deprecated and will be removed in a future release SET default_storage_engine=MEMORY; # # MDEV-30048 Prefix keys for CHAR work differently for MyISAM vs InnoDB # SET NAMES utf8mb3; CREATE TABLE t1 (a CHAR(10) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a)); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; CREATE TABLE t1 (a CHAR(10) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a(2))); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(2)) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; CREATE TABLE t1 (a CHAR(120) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a)); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(120) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; CREATE TABLE t1 (a CHAR(120) COLLATE utf8mb3_unicode_nopad_ci, UNIQUE KEY(a(100))); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` char(120) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL, UNIQUE KEY `a` (`a`(100)) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); DROP TABLE t1; # # MDEV-30050 Inconsistent results of DISTINCT with NOPAD # CREATE TABLE t1 (c CHAR(100) COLLATE utf8mb3_unicode_nopad_ci); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `c` char(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci INSERT INTO t1 VALUES ('ss'),('ß'); SET big_tables=0; Warnings: Warning 1287 '@@big_tables' is deprecated and will be removed in a future release SELECT DISTINCT c FROM t1; c ss ß SET big_tables=1; Warnings: Warning 1287 '@@big_tables' is deprecated and will be removed in a future release SELECT DISTINCT c FROM t1; c ss ß DROP TABLE t1; SET big_tables=DEFAULT; Warnings: Warning 1287 '@@big_tables' is deprecated and will be removed in a future release SET default_storage_engine=DEFAULT; # # End of 10.4 tests #