diff options
-rw-r--r-- | mysql-test/r/ctype_ldml.result | 1708 | ||||
-rw-r--r-- | mysql-test/std_data/ldml/Index.xml | 39 | ||||
-rw-r--r-- | mysql-test/suite/innodb/r/innodb_ctype_ldml.result | 6 | ||||
-rw-r--r-- | mysql-test/t/ctype_ldml.test | 103 | ||||
-rw-r--r-- | mysys/charset.c | 45 | ||||
-rw-r--r-- | strings/ctype-uca.c | 187 | ||||
-rw-r--r-- | strings/ctype.c | 2 |
7 files changed, 2000 insertions, 90 deletions
diff --git a/mysql-test/r/ctype_ldml.result b/mysql-test/r/ctype_ldml.result index 34e862d0222..237646ade77 100644 --- a/mysql-test/r/ctype_ldml.result +++ b/mysql-test/r/ctype_ldml.result @@ -483,6 +483,9 @@ ucs2_vn_ci ucs2 359 8 ucs2_5624_1 ucs2 360 8 utf8_5624_5 utf8 368 8 utf8_5624_5_bad utf8 369 8 +utf8_czech_test_w2 utf8 370 4 +utf8_czech_test_nopad_w2 utf8 371 4 +utf8_czech_test_bad_w2 utf8 372 4 utf32_test_ci utf32 391 8 utf8_maxuserid_ci utf8 2047 8 show collation like '%test%'; @@ -491,6 +494,9 @@ latin1_test latin1 99 Yes 1 latin1_test2 latin1 332 1 latin1_test2_cs latin1 333 1 utf8_test_ci utf8 353 8 +utf8_czech_test_w2 utf8 370 4 +utf8_czech_test_nopad_w2 utf8 371 4 +utf8_czech_test_bad_w2 utf8 372 4 ucs2_test_ci ucs2 358 8 utf8mb4_test_ci utf8mb4 326 8 utf8mb4_test_400_ci utf8mb4 328 8 @@ -1326,3 +1332,1705 @@ HEX(a) REPLACE(a,' ','<SP>') 6120 a<SP> 61 a DROP TABLE t1; +SET NAMES utf8 COLLATE utf8_czech_test_w2; +CREATE TABLE t1 AS SELECT SPACE(10) AS c1 LIMIT 0; +insert into t1 values ('A'),('a'); +insert into t1 values ('B'),('b'); +insert into t1 values ('C'),('c'); +insert into t1 values ('D'),('d'); +insert into t1 values ('E'),('e'); +insert into t1 values ('F'),('f'); +insert into t1 values ('G'),('g'); +insert into t1 values ('H'),('h'); +insert into t1 values ('I'),('i'); +insert into t1 values ('J'),('j'); +insert into t1 values ('K'),('k'); +insert into t1 values ('L'),('l'); +insert into t1 values ('M'),('m'); +insert into t1 values ('N'),('n'); +insert into t1 values ('O'),('o'); +insert into t1 values ('P'),('p'); +insert into t1 values ('Q'),('q'); +insert into t1 values ('R'),('r'); +insert into t1 values ('S'),('s'); +insert into t1 values ('T'),('t'); +insert into t1 values ('U'),('u'); +insert into t1 values ('V'),('v'); +insert into t1 values ('W'),('w'); +insert into t1 values ('X'),('x'); +insert into t1 values ('Y'),('y'); +insert into t1 values ('Z'),('z'); +insert into t1 values (_ucs2 0x00e0),(_ucs2 0x00c0); +insert into t1 values (_ucs2 0x00e1),(_ucs2 0x00c1); +insert into t1 values (_ucs2 0x00e2),(_ucs2 0x00c2); +insert into t1 values (_ucs2 0x00e3),(_ucs2 0x00c3); +insert into t1 values (_ucs2 0x00e4),(_ucs2 0x00c4); +insert into t1 values (_ucs2 0x00e5),(_ucs2 0x00c5); +insert into t1 values (_ucs2 0x00e6),(_ucs2 0x00c6); +insert into t1 values (_ucs2 0x00e7),(_ucs2 0x00c7); +insert into t1 values (_ucs2 0x00e8),(_ucs2 0x00c8); +insert into t1 values (_ucs2 0x00e9),(_ucs2 0x00c9); +insert into t1 values (_ucs2 0x00ea),(_ucs2 0x00ca); +insert into t1 values (_ucs2 0x00eb),(_ucs2 0x00cb); +insert into t1 values (_ucs2 0x00ec),(_ucs2 0x00cc); +insert into t1 values (_ucs2 0x00ed),(_ucs2 0x00cd); +insert into t1 values (_ucs2 0x00ee),(_ucs2 0x00ce); +insert into t1 values (_ucs2 0x00ef),(_ucs2 0x00cf); +insert into t1 values (_ucs2 0x00f0),(_ucs2 0x00d0); +insert into t1 values (_ucs2 0x00f1),(_ucs2 0x00d1); +insert into t1 values (_ucs2 0x00f2),(_ucs2 0x00d2); +insert into t1 values (_ucs2 0x00f3),(_ucs2 0x00d3); +insert into t1 values (_ucs2 0x00f4),(_ucs2 0x00d4); +insert into t1 values (_ucs2 0x00f5),(_ucs2 0x00d5); +insert into t1 values (_ucs2 0x00f6),(_ucs2 0x00d6); +insert into t1 values (_ucs2 0x00f7),(_ucs2 0x00d7); +insert into t1 values (_ucs2 0x00f8),(_ucs2 0x00d8); +insert into t1 values (_ucs2 0x00f9),(_ucs2 0x00d9); +insert into t1 values (_ucs2 0x00fa),(_ucs2 0x00da); +insert into t1 values (_ucs2 0x00fb),(_ucs2 0x00db); +insert into t1 values (_ucs2 0x00fc),(_ucs2 0x00dc); +insert into t1 values (_ucs2 0x00fd),(_ucs2 0x00dd); +insert into t1 values (_ucs2 0x00fe),(_ucs2 0x00de); +insert into t1 values (_ucs2 0x00ff),(_ucs2 0x00df); +insert into t1 values (_ucs2 0x0100),(_ucs2 0x0101),(_ucs2 0x0102),(_ucs2 0x0103); +insert into t1 values (_ucs2 0x0104),(_ucs2 0x0105),(_ucs2 0x0106),(_ucs2 0x0107); +insert into t1 values (_ucs2 0x0108),(_ucs2 0x0109),(_ucs2 0x010a),(_ucs2 0x010b); +insert into t1 values (_ucs2 0x010c),(_ucs2 0x010d),(_ucs2 0x010e),(_ucs2 0x010f); +insert into t1 values (_ucs2 0x0110),(_ucs2 0x0111),(_ucs2 0x0112),(_ucs2 0x0113); +insert into t1 values (_ucs2 0x0114),(_ucs2 0x0115),(_ucs2 0x0116),(_ucs2 0x0117); +insert into t1 values (_ucs2 0x0118),(_ucs2 0x0119),(_ucs2 0x011a),(_ucs2 0x011b); +insert into t1 values (_ucs2 0x011c),(_ucs2 0x011d),(_ucs2 0x011e),(_ucs2 0x011f); +insert into t1 values (_ucs2 0x0120),(_ucs2 0x0121),(_ucs2 0x0122),(_ucs2 0x0123); +insert into t1 values (_ucs2 0x0124),(_ucs2 0x0125),(_ucs2 0x0126),(_ucs2 0x0127); +insert into t1 values (_ucs2 0x0128),(_ucs2 0x0129),(_ucs2 0x012a),(_ucs2 0x012b); +insert into t1 values (_ucs2 0x012c),(_ucs2 0x012d),(_ucs2 0x012e),(_ucs2 0x012f); +insert into t1 values (_ucs2 0x0130),(_ucs2 0x0131),(_ucs2 0x0132),(_ucs2 0x0133); +insert into t1 values (_ucs2 0x0134),(_ucs2 0x0135),(_ucs2 0x0136),(_ucs2 0x0137); +insert into t1 values (_ucs2 0x0138),(_ucs2 0x0139),(_ucs2 0x013a),(_ucs2 0x013b); +insert into t1 values (_ucs2 0x013c),(_ucs2 0x013d),(_ucs2 0x013e),(_ucs2 0x013f); +insert into t1 values (_ucs2 0x0140),(_ucs2 0x0141),(_ucs2 0x0142),(_ucs2 0x0143); +insert into t1 values (_ucs2 0x0144),(_ucs2 0x0145),(_ucs2 0x0146),(_ucs2 0x0147); +insert into t1 values (_ucs2 0x0148),(_ucs2 0x0149),(_ucs2 0x014a),(_ucs2 0x014b); +insert into t1 values (_ucs2 0x014c),(_ucs2 0x014d),(_ucs2 0x014e),(_ucs2 0x014f); +insert into t1 values (_ucs2 0x0150),(_ucs2 0x0151),(_ucs2 0x0152),(_ucs2 0x0153); +insert into t1 values (_ucs2 0x0154),(_ucs2 0x0155),(_ucs2 0x0156),(_ucs2 0x0157); +insert into t1 values (_ucs2 0x0158),(_ucs2 0x0159),(_ucs2 0x015a),(_ucs2 0x015b); +insert into t1 values (_ucs2 0x015c),(_ucs2 0x015d),(_ucs2 0x015e),(_ucs2 0x015f); +insert into t1 values (_ucs2 0x0160),(_ucs2 0x0161),(_ucs2 0x0162),(_ucs2 0x0163); +insert into t1 values (_ucs2 0x0164),(_ucs2 0x0165),(_ucs2 0x0166),(_ucs2 0x0167); +insert into t1 values (_ucs2 0x0168),(_ucs2 0x0169),(_ucs2 0x016a),(_ucs2 0x016b); +insert into t1 values (_ucs2 0x016c),(_ucs2 0x016d),(_ucs2 0x016e),(_ucs2 0x016f); +insert into t1 values (_ucs2 0x0170),(_ucs2 0x0171),(_ucs2 0x0172),(_ucs2 0x0173); +insert into t1 values (_ucs2 0x0174),(_ucs2 0x0175),(_ucs2 0x0176),(_ucs2 0x0177); +insert into t1 values (_ucs2 0x0178),(_ucs2 0x0179),(_ucs2 0x017a),(_ucs2 0x017b); +insert into t1 values (_ucs2 0x017c),(_ucs2 0x017d),(_ucs2 0x017e),(_ucs2 0x017f); +insert into t1 values (_ucs2 0x0180),(_ucs2 0x0181),(_ucs2 0x0182),(_ucs2 0x0183); +insert into t1 values (_ucs2 0x0184),(_ucs2 0x0185),(_ucs2 0x0186),(_ucs2 0x0187); +insert into t1 values (_ucs2 0x0188),(_ucs2 0x0189),(_ucs2 0x018a),(_ucs2 0x018b); +insert into t1 values (_ucs2 0x018c),(_ucs2 0x018d),(_ucs2 0x018e),(_ucs2 0x018f); +insert into t1 values (_ucs2 0x0190),(_ucs2 0x0191),(_ucs2 0x0192),(_ucs2 0x0193); +insert into t1 values (_ucs2 0x0194),(_ucs2 0x0195),(_ucs2 0x0196),(_ucs2 0x0197); +insert into t1 values (_ucs2 0x0198),(_ucs2 0x0199),(_ucs2 0x019a),(_ucs2 0x019b); +insert into t1 values (_ucs2 0x019c),(_ucs2 0x019d),(_ucs2 0x019e),(_ucs2 0x019f); +insert into t1 values (_ucs2 0x01a0),(_ucs2 0x01a1),(_ucs2 0x01a2),(_ucs2 0x01a3); +insert into t1 values (_ucs2 0x01a4),(_ucs2 0x01a5),(_ucs2 0x01a6),(_ucs2 0x01a7); +insert into t1 values (_ucs2 0x01a8),(_ucs2 0x01a9),(_ucs2 0x01aa),(_ucs2 0x01ab); +insert into t1 values (_ucs2 0x01ac),(_ucs2 0x01ad),(_ucs2 0x01ae),(_ucs2 0x01af); +insert into t1 values (_ucs2 0x01b0),(_ucs2 0x01b1),(_ucs2 0x01b2),(_ucs2 0x01b3); +insert into t1 values (_ucs2 0x01b4),(_ucs2 0x01b5),(_ucs2 0x01b6),(_ucs2 0x01b7); +insert into t1 values (_ucs2 0x01b8),(_ucs2 0x01b9),(_ucs2 0x01ba),(_ucs2 0x01bb); +insert into t1 values (_ucs2 0x01bc),(_ucs2 0x01bd),(_ucs2 0x01be),(_ucs2 0x01bf); +insert into t1 values (_ucs2 0x01c0),(_ucs2 0x01c1),(_ucs2 0x01c2),(_ucs2 0x01c3); +insert into t1 values (_ucs2 0x01c4),(_ucs2 0x01c5),(_ucs2 0x01c6),(_ucs2 0x01c7); +insert into t1 values (_ucs2 0x01c8),(_ucs2 0x01c9),(_ucs2 0x01ca),(_ucs2 0x01cb); +insert into t1 values (_ucs2 0x01cc),(_ucs2 0x01cd),(_ucs2 0x01ce),(_ucs2 0x01cf); +insert into t1 values (_ucs2 0x01d0),(_ucs2 0x01d1),(_ucs2 0x01d2),(_ucs2 0x01d3); +insert into t1 values (_ucs2 0x01d4),(_ucs2 0x01d5),(_ucs2 0x01d6),(_ucs2 0x01d7); +insert into t1 values (_ucs2 0x01d8),(_ucs2 0x01d9),(_ucs2 0x01da),(_ucs2 0x01db); +insert into t1 values (_ucs2 0x01dc),(_ucs2 0x01dd),(_ucs2 0x01de),(_ucs2 0x01df); +insert into t1 values (_ucs2 0x01e0),(_ucs2 0x01e1),(_ucs2 0x01e2),(_ucs2 0x01e3); +insert into t1 values (_ucs2 0x01e4),(_ucs2 0x01e5),(_ucs2 0x01e6),(_ucs2 0x01e7); +insert into t1 values (_ucs2 0x01e8),(_ucs2 0x01e9),(_ucs2 0x01ea),(_ucs2 0x01eb); +insert into t1 values (_ucs2 0x01ec),(_ucs2 0x01ed),(_ucs2 0x01ee),(_ucs2 0x01ef); +insert into t1 values (_ucs2 0x01f0),(_ucs2 0x01f1),(_ucs2 0x01f2),(_ucs2 0x01f3); +insert into t1 values (_ucs2 0x01f4),(_ucs2 0x01f5),(_ucs2 0x01f6),(_ucs2 0x01f7); +insert into t1 values (_ucs2 0x01f8),(_ucs2 0x01f9),(_ucs2 0x01fa),(_ucs2 0x01fb); +insert into t1 values (_ucs2 0x01fc),(_ucs2 0x01fd),(_ucs2 0x01fe),(_ucs2 0x01ff); +INSERT INTO t1 VALUES (_ucs2 0x1EA0),(_ucs2 0x1EA1),(_ucs2 0x1EA2),(_ucs2 0x1EA3); +INSERT INTO t1 VALUES (_ucs2 0x1EA4),(_ucs2 0x1EA5),(_ucs2 0x1EA6),(_ucs2 0x1EA7); +INSERT INTO t1 VALUES (_ucs2 0x1EA8),(_ucs2 0x1EA9),(_ucs2 0x1EAA),(_ucs2 0x1EAB); +INSERT INTO t1 VALUES (_ucs2 0x1EAC),(_ucs2 0x1EAD),(_ucs2 0x1EAE),(_ucs2 0x1EAF); +INSERT INTO t1 VALUES (_ucs2 0x1EB0),(_ucs2 0x1EB1),(_ucs2 0x1EB2),(_ucs2 0x1EB3); +INSERT INTO t1 VALUES (_ucs2 0x1EB4),(_ucs2 0x1EB5),(_ucs2 0x1EB6),(_ucs2 0x1EB7); +INSERT INTO t1 VALUES (_ucs2 0x1EB8),(_ucs2 0x1EB9),(_ucs2 0x1EBA),(_ucs2 0x1EBB); +INSERT INTO t1 VALUES (_ucs2 0x1EBC),(_ucs2 0x1EBD),(_ucs2 0x1EBE),(_ucs2 0x1EBF); +INSERT INTO t1 VALUES (_ucs2 0x1EC0),(_ucs2 0x1EC1),(_ucs2 0x1EC2),(_ucs2 0x1EC3); +INSERT INTO t1 VALUES (_ucs2 0x1EC4),(_ucs2 0x1EC5),(_ucs2 0x1EC6),(_ucs2 0x1EC7); +INSERT INTO t1 VALUES (_ucs2 0x1EC8),(_ucs2 0x1EC9),(_ucs2 0x1ECA),(_ucs2 0x1ECB); +INSERT INTO t1 VALUES (_ucs2 0x1ECC),(_ucs2 0x1ECD),(_ucs2 0x1ECE),(_ucs2 0x1ECF); +INSERT INTO t1 VALUES (_ucs2 0x1ED0),(_ucs2 0x1ED1),(_ucs2 0x1ED2),(_ucs2 0x1ED3); +INSERT INTO t1 VALUES (_ucs2 0x1ED4),(_ucs2 0x1ED5),(_ucs2 0x1ED6),(_ucs2 0x1ED7); +INSERT INTO t1 VALUES (_ucs2 0x1ED8),(_ucs2 0x1ED9),(_ucs2 0x1EDA),(_ucs2 0x1EDB); +INSERT INTO t1 VALUES (_ucs2 0x1EDC),(_ucs2 0x1EDD),(_ucs2 0x1EDE),(_ucs2 0x1EDF); +INSERT INTO t1 VALUES (_ucs2 0x1EE0),(_ucs2 0x1EE1),(_ucs2 0x1EE2),(_ucs2 0x1EE3); +INSERT INTO t1 VALUES (_ucs2 0x1EE4),(_ucs2 0x1EE5),(_ucs2 0x1EE6),(_ucs2 0x1EE7); +INSERT INTO t1 VALUES (_ucs2 0x1EE8),(_ucs2 0x1EE9),(_ucs2 0x1EEA),(_ucs2 0x1EEB); +INSERT INTO t1 VALUES (_ucs2 0x1EEC),(_ucs2 0x1EED),(_ucs2 0x1EEE),(_ucs2 0x1EEF); +INSERT INTO t1 VALUES (_ucs2 0x1EF0),(_ucs2 0x1EF1); +insert into t1 values ('AA'),('Aa'),('aa'),('aA'); +insert into t1 values ('AE'),('Ae'),('ae'),('aE'); +insert into t1 values ('CH'),('Ch'),('ch'),('cH'); +insert into t1 values ('DZ'),('Dz'),('dz'),('dZ'); +insert into t1 values ('DŽ'),('Dž'),('dž'),('dŽ'); +insert into t1 values ('IJ'),('Ij'),('ij'),('iJ'); +insert into t1 values ('LJ'),('Lj'),('lj'),('lJ'); +insert into t1 values ('LL'),('Ll'),('ll'),('lL'); +insert into t1 values ('NJ'),('Nj'),('nj'),('nJ'); +insert into t1 values ('OE'),('Oe'),('oe'),('oE'); +insert into t1 values ('SS'),('Ss'),('ss'),('sS'); +insert into t1 values ('RR'),('Rr'),('rr'),('rR'); +INSERT INTO t1 VALUES ('a '); +SELECT c1, HEX(WEIGHT_STRING(c1 LEVEL 1)), HEX(WEIGHT_STRING(c1 LEVEL 2)) FROM t1 ORDER BY c1, BINARY c1; +c1 HEX(WEIGHT_STRING(c1 LEVEL 1)) HEX(WEIGHT_STRING(c1 LEVEL 2)) +÷ 0552 0020 +× 0553 0020 +A 120F 0020 +a 120F 0020 +a 120F020A 00200020 +Á 120F 00200032 +á 120F 00200032 +À 120F 00200035 +à 120F 00200035 +Ă 120F 00200037 +ă 120F 00200037 +Ắ 120F 002000370032 +ắ 120F 002000370032 +Ằ 120F 002000370035 +ằ 120F 002000370035 +Ẵ 120F 00200037004E +ẵ 120F 00200037004E +Ẳ 120F 002000370064 +ẳ 120F 002000370064 + 120F 0020003C +â 120F 0020003C +Ấ 120F 0020003C0032 +ấ 120F 0020003C0032 +Ầ 120F 0020003C0035 +ầ 120F 0020003C0035 +Ẫ 120F 0020003C004E +ẫ 120F 0020003C004E +Ẩ 120F 0020003C0064 +ẩ 120F 0020003C0064 +Ǎ 120F 00200041 +ǎ 120F 00200041 +Å 120F 00200043 +å 120F 00200043 +Ǻ 120F 002000430032 +ǻ 120F 002000430032 +Ä 120F 00200047 +ä 120F 00200047 +Ǟ 120F 00200047005B +ǟ 120F 00200047005B +à 120F 0020004E +ã 120F 0020004E +Ǡ 120F 00200052005B +ǡ 120F 00200052005B +Ą 120F 00200059 +ą 120F 00200059 +Ā 120F 0020005B +ā 120F 0020005B +Ả 120F 00200064 +ả 120F 00200064 +Ạ 120F 00200070 +ạ 120F 00200070 +Ặ 120F 002000700037 +ặ 120F 002000700037 +Ậ 120F 00200070003C +ậ 120F 00200070003C +AA 120F120F 00200020 +Aa 120F120F 00200020 +aA 120F120F 00200020 +aa 120F120F 00200020 +AE 120F126B 00200020 +Ae 120F126B 00200020 +aE 120F126B 00200020 +ae 120F126B 00200020 +Æ 120F126B 002001590020 +æ 120F126B 002001590020 +Ǽ 120F126B 0020015900200032 +ǽ 120F126B 0020015900200032 +Ǣ 120F126B 002001590020005B +ǣ 120F126B 002001590020005B +B 1225 0020 +b 1225 0020 +ƀ 122D 0020 +Ɓ 1235 0020 +Ƃ 1239 0020 +ƃ 1239 0020 +C 123D 0020 +c 123D 0020 +Ć 123D 00200032 +ć 123D 00200032 +Ĉ 123D 0020003C +ĉ 123D 0020003C +Ċ 123D 00200052 +ċ 123D 00200052 +Ç 123D 00200056 +ç 123D 00200056 +cH 123D12D3 00200020 +Č 123E 0020 +č 123E 0020 +Ƈ 1246 0020 +ƈ 1246 0020 +D 1250 0020 +d 1250 0020 +Ď 1250 00200041 +ď 1250 00200041 +Đ 1250 0020007D +đ 1250 0020007D +Ð 1250 00200159 +ð 1250 00200159 +DZ 125014AD 00200020 +Dz 125014AD 00200020 +dZ 125014AD 00200020 +dz 125014AD 00200020 +DZ 125014AD 00200020 +Dz 125014AD 00200020 +dz 125014AD 00200020 +DŽ 125014AD 002000200041 +Dž 125014AD 002000200041 +dž 125014AD 002000200041 +DŽ 125014AE 00200020 +Dž 125014AE 00200020 +dŽ 125014AE 00200020 +dž 125014AE 00200020 +Ɖ 1258 0020 +Ɗ 125C 0020 +Ƌ 1261 0020 +ƌ 1261 0020 +E 126B 0020 +e 126B 0020 +É 126B 00200032 +é 126B 00200032 +È 126B 00200035 +è 126B 00200035 +Ĕ 126B 00200037 +ĕ 126B 00200037 +Ê 126B 0020003C +ê 126B 0020003C +Ế 126B 0020003C0032 +ế 126B 0020003C0032 +Ề 126B 0020003C0035 +ề 126B 0020003C0035 +Ễ 126B 0020003C004E +ễ 126B 0020003C004E +Ể 126B 0020003C0064 +ể 126B 0020003C0064 +Ě 126B 00200041 +ě 126B 00200041 +Ë 126B 00200047 +ë 126B 00200047 +Ẽ 126B 0020004E +ẽ 126B 0020004E +Ė 126B 00200052 +ė 126B 00200052 +Ę 126B 00200059 +ę 126B 00200059 +Ē 126B 0020005B +ē 126B 0020005B +Ẻ 126B 00200064 +ẻ 126B 00200064 +Ẹ 126B 00200070 +ẹ 126B 00200070 +Ệ 126B 00200070003C +ệ 126B 00200070003C +Ǝ 1276 0020 +ǝ 1276 0020 +Ə 127B 0020 +Ɛ 1280 0020 +F 12A3 0020 +f 12A3 0020 +Ƒ 12AA 0020 +ƒ 12AA 0020 +G 12B0 0020 +g 12B0 0020 +Ǵ 12B0 00200032 +ǵ 12B0 00200032 +Ğ 12B0 00200037 +ğ 12B0 00200037 +Ĝ 12B0 0020003C +ĝ 12B0 0020003C +Ǧ 12B0 00200041 +ǧ 12B0 00200041 +Ġ 12B0 00200052 +ġ 12B0 00200052 +Ģ 12B0 00200056 +ģ 12B0 00200056 +Ǥ 12BC 0020 +ǥ 12BC 0020 +Ɠ 12C1 0020 +Ɣ 12CB 0020 +Ƣ 12CF 0020 +ƣ 12CF 0020 +H 12D3 0020 +h 12D3 0020 +Ĥ 12D3 0020003C +ĥ 12D3 0020003C +Ħ 12D3 0020007D +ħ 12D3 0020007D +CH 12D4 0020 +Ch 12D4 0020 +ch 12D4 0020 +ƕ 12DB 0020 +Ƕ 12DB 0020 +I 12EC 0020 +i 12EC 0020 +Í 12EC 00200032 +í 12EC 00200032 +Ì 12EC 00200035 +ì 12EC 00200035 +Ĭ 12EC 00200037 +ĭ 12EC 00200037 +Î 12EC 0020003C +î 12EC 0020003C +Ǐ 12EC 00200041 +ǐ 12EC 00200041 +Ï 12EC 00200047 +ï 12EC 00200047 +Ĩ 12EC 0020004E +ĩ 12EC 0020004E +İ 12EC 00200052 +Į 12EC 00200059 +į 12EC 00200059 +Ī 12EC 0020005B +ī 12EC 0020005B +Ỉ 12EC 00200064 +ỉ 12EC 00200064 +Ị 12EC 00200070 +ị 12EC 00200070 +IJ 12EC1305 00200020 +Ij 12EC1305 00200020 +iJ 12EC1305 00200020 +ij 12EC1305 00200020 +IJ 12EC1305 00200020 +ij 12EC1305 00200020 +ı 12F0 0020 +Ɨ 12FA 0020 +Ɩ 1300 0020 +J 1305 0020 +j 1305 0020 +Ĵ 1305 0020003C +ĵ 1305 0020003C +ǰ 1305 00200041 +K 131E 0020 +k 131E 0020 +Ǩ 131E 00200041 +ǩ 131E 00200041 +Ķ 131E 00200056 +ķ 131E 00200056 +Ƙ 1324 0020 +ƙ 1324 0020 +L 1330 0020 +l 1330 0020 +Ĺ 1330 00200032 +ĺ 1330 00200032 +Ľ 1330 00200041 +ľ 1330 00200041 +Ļ 1330 00200056 +ļ 1330 00200056 +Ł 1330 0020007D +ł 1330 0020007D +Ŀ 1330 00200159 +ŀ 1330 00200159 +LJ 13301305 00200020 +Lj 13301305 00200020 +lJ 13301305 00200020 +lj 13301305 00200020 +LJ 13301305 00200020 +Lj 13301305 00200020 +lj 13301305 00200020 +LL 13301330 00200020 +Ll 13301330 00200020 +lL 13301330 00200020 +ll 13301330 00200020 +ƚ 133B 0020 +ƛ 1357 0020 +M 135F 0020 +m 135F 0020 +N 136D 0020 +n 136D 0020 +Ń 136D 00200032 +ń 136D 00200032 +Ǹ 136D 00200035 +ǹ 136D 00200035 +Ň 136D 00200041 +ň 136D 00200041 +Ñ 136D 0020004E +ñ 136D 0020004E +Ņ 136D 00200056 +ņ 136D 00200056 +NJ 136D1305 00200020 +Nj 136D1305 00200020 +nJ 136D1305 00200020 +nj 136D1305 00200020 +NJ 136D1305 00200020 +Nj 136D1305 00200020 +nj 136D1305 00200020 +Ɲ 1378 0020 +ƞ 137C 0020 +Ŋ 138A 0020 +ŋ 138A 0020 +O 138E 0020 +o 138E 0020 +Ó 138E 00200032 +ó 138E 00200032 +Ò 138E 00200035 +ò 138E 00200035 +Ŏ 138E 00200037 +ŏ 138E 00200037 +Ô 138E 0020003C +ô 138E 0020003C +Ố 138E 0020003C0032 +ố 138E 0020003C0032 +Ồ 138E 0020003C0035 +ồ 138E 0020003C0035 +Ỗ 138E 0020003C004E +ỗ 138E 0020003C004E +Ổ 138E 0020003C0064 +ổ 138E 0020003C0064 +Ǒ 138E 00200041 +ǒ 138E 00200041 +Ö 138E 00200047 +ö 138E 00200047 +Ő 138E 0020004D +ő 138E 0020004D +Õ 138E 0020004E +õ 138E 0020004E +Ø 138E 00200054 +ø 138E 00200054 +Ǿ 138E 002000540032 +ǿ 138E 002000540032 +Ǫ 138E 00200059 +ǫ 138E 00200059 +Ǭ 138E 00200059005B +ǭ 138E 00200059005B +Ō 138E 0020005B +ō 138E 0020005B +Ỏ 138E 00200064 +ỏ 138E 00200064 +Ơ 138E 00200068 +ơ 138E 00200068 +Ớ 138E 002000680032 +ớ 138E 002000680032 +Ờ 138E 002000680035 +ờ 138E 002000680035 +Ỡ 138E 00200068004E +ỡ 138E 00200068004E +Ở 138E 002000680064 +ở 138E 002000680064 +Ợ 138E 002000680070 +ợ 138E 002000680070 +Ọ 138E 00200070 +ọ 138E 00200070 +Ộ 138E 00200070003C +ộ 138E 00200070003C +OE 138E126B 00200020 +Oe 138E126B 00200020 +oE 138E126B 00200020 +oe 138E126B 00200020 +Œ 138E126B 002001590020 +œ 138E126B 002001590020 +Ɔ 139A 0020 +Ɵ 13A5 0020 +P 13B3 0020 +p 13B3 0020 +Ƥ 13BC 0020 +ƥ 13BC 0020 +Q 13C8 0020 +q 13C8 0020 +ĸ 13D6 0020 +R 13DA 0020 +r 13DA 0020 +Ŕ 13DA 00200032 +ŕ 13DA 00200032 +Ŗ 13DA 00200056 +ŗ 13DA 00200056 +RR 13DA13DA 00200020 +Rr 13DA13DA 00200020 +rR 13DA13DA 00200020 +rr 13DA13DA 00200020 +Ř 13DB 0020 +ř 13DB 0020 +Ʀ 13DE 0020 +S 1410 0020 +s 1410 0020 +Ś 1410 00200032 +ś 1410 00200032 +Ŝ 1410 0020003C +ŝ 1410 0020003C +Ş 1410 00200056 +ş 1410 00200056 +ſ 1410 0020015A +SS 14101410 00200020 +Ss 14101410 00200020 +sS 14101410 00200020 +ss 14101410 00200020 +ß 14101410 002001590020 +Š 1411 0020 +š 1411 0020 +Ʃ 1421 0020 +ƪ 1426 0020 +T 1433 0020 +t 1433 0020 +Ť 1433 00200041 +ť 1433 00200041 +Ţ 1433 00200056 +ţ 1433 00200056 +ƾ 14331410 00200020 +Ŧ 1438 0020 +ŧ 1438 0020 +ƫ 143E 0020 +Ƭ 1442 0020 +ƭ 1442 0020 +Ʈ 1446 0020 +U 1453 0020 +u 1453 0020 +Ú 1453 00200032 +ú 1453 00200032 +Ù 1453 00200035 +ù 1453 00200035 +Ŭ 1453 00200037 +ŭ 1453 00200037 +Û 1453 0020003C +û 1453 0020003C +Ǔ 1453 00200041 +ǔ 1453 00200041 +Ů 1453 00200043 +ů 1453 00200043 +Ü 1453 00200047 +ü 1453 00200047 +Ǘ 1453 002000470032 +ǘ 1453 002000470032 +Ǜ 1453 002000470035 +ǜ 1453 002000470035 +Ǚ 1453 002000470041 +ǚ 1453 002000470041 +Ǖ 1453 00200047005B +ǖ 1453 00200047005B +Ű 1453 0020004D +ű 1453 0020004D +Ũ 1453 0020004E +ũ 1453 0020004E +Ų 1453 00200059 +ų 1453 00200059 +Ū 1453 0020005B +ū 1453 0020005B +Ủ 1453 00200064 +ủ 1453 00200064 +Ư 1453 00200068 +ư 1453 00200068 +Ứ 1453 002000680032 +ứ 1453 002000680032 +Ừ 1453 002000680035 +ừ 1453 002000680035 +Ữ 1453 00200068004E +ữ 1453 00200068004E +Ử 1453 002000680064 +ử 1453 002000680064 +Ự 1453 002000680070 +ự 1453 002000680070 +Ụ 1453 00200070 +ụ 1453 00200070 +Ɯ 146D 0020 +Ʊ 1476 0020 +V 147B 0020 +v 147B 0020 +Ʋ 1482 0020 +W 148D 0020 +w 148D 0020 +Ŵ 148D 0020003C +ŵ 148D 0020003C +X 1497 0020 +x 1497 0020 +Y 149C 0020 +y 149C 0020 +Ý 149C 00200032 +ý 149C 00200032 +Ŷ 149C 0020003C +ŷ 149C 0020003C +ÿ 149C 00200047 +Ÿ 149C 00200047 +Ƴ 14A8 0020 +ƴ 14A8 0020 +Z 14AD 0020 +z 14AD 0020 +Ź 14AD 00200032 +ź 14AD 00200032 +Ż 14AD 00200052 +ż 14AD 00200052 +ƍ 14AD148D 00200020 +Ž 14AE 0020 +ž 14AE 0020 +Ƶ 14B2 0020 +ƶ 14B2 0020 +Ʒ 14CA 0020 +Ǯ 14CA 00200041 +ǯ 14CA 00200041 +Ƹ 14CF 0020 +ƹ 14CF 0020 +ƺ 14D4 0020 +Þ 14E0 0020 +þ 14E0 0020 +ƿ 14E6 0020 +Ƿ 14E6 0020 +ƻ 14EF 0020 +Ƨ 14F6 0020 +ƨ 14F6 0020 +Ƽ 14FA 0020 +ƽ 14FA 0020 +Ƅ 14FE 0020 +ƅ 14FE 0020 +ʼn 150B136D 00200020 +ǀ 1525 0020 +ǁ 1529 0020 +ǂ 152D 0020 +ǃ 1531 0020 +SELECT c1, HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 1)), HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 2)) FROM t1 WHERE c1 BETWEEN 'a' AND 'aZ' ORDER BY c1, BINARY c1; +c1 HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 1)) HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 2)) +A 120F020A020A 002000200020 +a 120F020A020A 002000200020 +a 120F020A020A 002000200020 +Á 120F020A020A 002000320020 +á 120F020A020A 002000320020 +À 120F020A020A 002000350020 +à 120F020A020A 002000350020 +Ă 120F020A020A 002000370020 +ă 120F020A020A 002000370020 +Ắ 120F020A020A 002000370032 +ắ 120F020A020A 002000370032 +Ằ 120F020A020A 002000370035 +ằ 120F020A020A 002000370035 +Ẵ 120F020A020A 00200037004E +ẵ 120F020A020A 00200037004E +Ẳ 120F020A020A 002000370064 +ẳ 120F020A020A 002000370064 + 120F020A020A 0020003C0020 +â 120F020A020A 0020003C0020 +Ấ 120F020A020A 0020003C0032 +ấ 120F020A020A 0020003C0032 +Ầ 120F020A020A 0020003C0035 +ầ 120F020A020A 0020003C0035 +Ẫ 120F020A020A 0020003C004E +ẫ 120F020A020A 0020003C004E +Ẩ 120F020A020A 0020003C0064 +ẩ 120F020A020A 0020003C0064 +Ǎ 120F020A020A 002000410020 +ǎ 120F020A020A 002000410020 +Å 120F020A020A 002000430020 +å 120F020A020A 002000430020 +Ǻ 120F020A020A 002000430032 +ǻ 120F020A020A 002000430032 +Ä 120F020A020A 002000470020 +ä 120F020A020A 002000470020 +Ǟ 120F020A020A 00200047005B +ǟ 120F020A020A 00200047005B +à 120F020A020A 0020004E0020 +ã 120F020A020A 0020004E0020 +Ǡ 120F020A020A 00200052005B +ǡ 120F020A020A 00200052005B +Ą 120F020A020A 002000590020 +ą 120F020A020A 002000590020 +Ā 120F020A020A 0020005B0020 +ā 120F020A020A 0020005B0020 +Ả 120F020A020A 002000640020 +ả 120F020A020A 002000640020 +Ạ 120F020A020A 002000700020 +ạ 120F020A020A 002000700020 +Ặ 120F020A020A 002000700037 +ặ 120F020A020A 002000700037 +Ậ 120F020A020A 00200070003C +ậ 120F020A020A 00200070003C +AA 120F120F020A 002000200020 +Aa 120F120F020A 002000200020 +aA 120F120F020A 002000200020 +aa 120F120F020A 002000200020 +AE 120F126B020A 002000200020 +Ae 120F126B020A 002000200020 +aE 120F126B020A 002000200020 +ae 120F126B020A 002000200020 +Æ 120F126B020A 002001590020 +æ 120F126B020A 002001590020 +Ǽ 120F126B020A 002001590020 +ǽ 120F126B020A 002001590020 +Ǣ 120F126B020A 002001590020 +ǣ 120F126B020A 002001590020 +DROP TABLE t1; +SELECT 'a' = 'a '; +'a' = 'a ' +1 +SELECT 'a' < 'á'; +'a' < 'á' +1 +SELECT 'áa' < 'ab'; +'áa' < 'ab' +1 +SELECT 'á' < 'ä'; +'á' < 'ä' +1 +SELECT 'äa' < 'áb'; +'äa' < 'áb' +1 +SELECT 'c' < 'č'; +'c' < 'č' +1 +SELECT 'cb' < 'ča'; +'cb' < 'ča' +1 +SELECT 'd' < 'ď'; +'d' < 'ď' +1 +SELECT 'ďa' < 'db'; +'ďa' < 'db' +1 +SELECT 'e' < 'é'; +'e' < 'é' +1 +SELECT 'éa' < 'eb'; +'éa' < 'eb' +1 +SELECT 'é' < 'ě'; +'é' < 'ě' +1 +SELECT 'ěa' < 'éb'; +'ěa' < 'éb' +1 +SELECT 'i' < 'í'; +'i' < 'í' +1 +SELECT 'ía' < 'ib'; +'ía' < 'ib' +1 +SELECT 'n' < 'ň'; +'n' < 'ň' +1 +SELECT 'ňa' < 'nb'; +'ňa' < 'nb' +1 +SELECT 'o' < 'ó'; +'o' < 'ó' +1 +SELECT 'óa' < 'ob'; +'óa' < 'ob' +1 +SELECT 'ó' < 'ö'; +'ó' < 'ö' +1 +SELECT 'öa' < 'ób'; +'öa' < 'ób' +1 +SELECT 'r' < 'ř'; +'r' < 'ř' +1 +SELECT 'rb' < 'řa'; +'rb' < 'řa' +1 +SELECT 's' < 'š'; +'s' < 'š' +1 +SELECT 'sb' < 'ša'; +'sb' < 'ša' +1 +SELECT 't' < 'ť'; +'t' < 'ť' +1 +SELECT 'ťa' < 'tb'; +'ťa' < 'tb' +1 +SELECT 'u' < 'ú'; +'u' < 'ú' +1 +SELECT 'úa' < 'ub'; +'úa' < 'ub' +1 +SELECT 'ú' < 'ů'; +'ú' < 'ů' +1 +SELECT 'ůa' < 'úb'; +'ůa' < 'úb' +1 +SELECT 'ů' < 'ü'; +'ů' < 'ü' +1 +SELECT 'üa' < 'ůb'; +'üa' < 'ůb' +1 +SELECT 'y' < 'ý'; +'y' < 'ý' +1 +SELECT 'ýa' < 'yb'; +'ýa' < 'yb' +1 +SELECT 'z' < 'ž'; +'z' < 'ž' +1 +SELECT 'zb' < 'ža'; +'zb' < 'ža' +1 +SELECT 'hž' < 'ch'; +'hž' < 'ch' +1 +SELECT 'chž'< 'i'; +'chž'< 'i' +1 +SET NAMES utf8 COLLATE utf8_czech_test_nopad_w2; +CREATE TABLE t1 AS SELECT SPACE(10) AS c1 LIMIT 0; +insert into t1 values ('A'),('a'); +insert into t1 values ('B'),('b'); +insert into t1 values ('C'),('c'); +insert into t1 values ('D'),('d'); +insert into t1 values ('E'),('e'); +insert into t1 values ('F'),('f'); +insert into t1 values ('G'),('g'); +insert into t1 values ('H'),('h'); +insert into t1 values ('I'),('i'); +insert into t1 values ('J'),('j'); +insert into t1 values ('K'),('k'); +insert into t1 values ('L'),('l'); +insert into t1 values ('M'),('m'); +insert into t1 values ('N'),('n'); +insert into t1 values ('O'),('o'); +insert into t1 values ('P'),('p'); +insert into t1 values ('Q'),('q'); +insert into t1 values ('R'),('r'); +insert into t1 values ('S'),('s'); +insert into t1 values ('T'),('t'); +insert into t1 values ('U'),('u'); +insert into t1 values ('V'),('v'); +insert into t1 values ('W'),('w'); +insert into t1 values ('X'),('x'); +insert into t1 values ('Y'),('y'); +insert into t1 values ('Z'),('z'); +insert into t1 values (_ucs2 0x00e0),(_ucs2 0x00c0); +insert into t1 values (_ucs2 0x00e1),(_ucs2 0x00c1); +insert into t1 values (_ucs2 0x00e2),(_ucs2 0x00c2); +insert into t1 values (_ucs2 0x00e3),(_ucs2 0x00c3); +insert into t1 values (_ucs2 0x00e4),(_ucs2 0x00c4); +insert into t1 values (_ucs2 0x00e5),(_ucs2 0x00c5); +insert into t1 values (_ucs2 0x00e6),(_ucs2 0x00c6); +insert into t1 values (_ucs2 0x00e7),(_ucs2 0x00c7); +insert into t1 values (_ucs2 0x00e8),(_ucs2 0x00c8); +insert into t1 values (_ucs2 0x00e9),(_ucs2 0x00c9); +insert into t1 values (_ucs2 0x00ea),(_ucs2 0x00ca); +insert into t1 values (_ucs2 0x00eb),(_ucs2 0x00cb); +insert into t1 values (_ucs2 0x00ec),(_ucs2 0x00cc); +insert into t1 values (_ucs2 0x00ed),(_ucs2 0x00cd); +insert into t1 values (_ucs2 0x00ee),(_ucs2 0x00ce); +insert into t1 values (_ucs2 0x00ef),(_ucs2 0x00cf); +insert into t1 values (_ucs2 0x00f0),(_ucs2 0x00d0); +insert into t1 values (_ucs2 0x00f1),(_ucs2 0x00d1); +insert into t1 values (_ucs2 0x00f2),(_ucs2 0x00d2); +insert into t1 values (_ucs2 0x00f3),(_ucs2 0x00d3); +insert into t1 values (_ucs2 0x00f4),(_ucs2 0x00d4); +insert into t1 values (_ucs2 0x00f5),(_ucs2 0x00d5); +insert into t1 values (_ucs2 0x00f6),(_ucs2 0x00d6); +insert into t1 values (_ucs2 0x00f7),(_ucs2 0x00d7); +insert into t1 values (_ucs2 0x00f8),(_ucs2 0x00d8); +insert into t1 values (_ucs2 0x00f9),(_ucs2 0x00d9); +insert into t1 values (_ucs2 0x00fa),(_ucs2 0x00da); +insert into t1 values (_ucs2 0x00fb),(_ucs2 0x00db); +insert into t1 values (_ucs2 0x00fc),(_ucs2 0x00dc); +insert into t1 values (_ucs2 0x00fd),(_ucs2 0x00dd); +insert into t1 values (_ucs2 0x00fe),(_ucs2 0x00de); +insert into t1 values (_ucs2 0x00ff),(_ucs2 0x00df); +insert into t1 values (_ucs2 0x0100),(_ucs2 0x0101),(_ucs2 0x0102),(_ucs2 0x0103); +insert into t1 values (_ucs2 0x0104),(_ucs2 0x0105),(_ucs2 0x0106),(_ucs2 0x0107); +insert into t1 values (_ucs2 0x0108),(_ucs2 0x0109),(_ucs2 0x010a),(_ucs2 0x010b); +insert into t1 values (_ucs2 0x010c),(_ucs2 0x010d),(_ucs2 0x010e),(_ucs2 0x010f); +insert into t1 values (_ucs2 0x0110),(_ucs2 0x0111),(_ucs2 0x0112),(_ucs2 0x0113); +insert into t1 values (_ucs2 0x0114),(_ucs2 0x0115),(_ucs2 0x0116),(_ucs2 0x0117); +insert into t1 values (_ucs2 0x0118),(_ucs2 0x0119),(_ucs2 0x011a),(_ucs2 0x011b); +insert into t1 values (_ucs2 0x011c),(_ucs2 0x011d),(_ucs2 0x011e),(_ucs2 0x011f); +insert into t1 values (_ucs2 0x0120),(_ucs2 0x0121),(_ucs2 0x0122),(_ucs2 0x0123); +insert into t1 values (_ucs2 0x0124),(_ucs2 0x0125),(_ucs2 0x0126),(_ucs2 0x0127); +insert into t1 values (_ucs2 0x0128),(_ucs2 0x0129),(_ucs2 0x012a),(_ucs2 0x012b); +insert into t1 values (_ucs2 0x012c),(_ucs2 0x012d),(_ucs2 0x012e),(_ucs2 0x012f); +insert into t1 values (_ucs2 0x0130),(_ucs2 0x0131),(_ucs2 0x0132),(_ucs2 0x0133); +insert into t1 values (_ucs2 0x0134),(_ucs2 0x0135),(_ucs2 0x0136),(_ucs2 0x0137); +insert into t1 values (_ucs2 0x0138),(_ucs2 0x0139),(_ucs2 0x013a),(_ucs2 0x013b); +insert into t1 values (_ucs2 0x013c),(_ucs2 0x013d),(_ucs2 0x013e),(_ucs2 0x013f); +insert into t1 values (_ucs2 0x0140),(_ucs2 0x0141),(_ucs2 0x0142),(_ucs2 0x0143); +insert into t1 values (_ucs2 0x0144),(_ucs2 0x0145),(_ucs2 0x0146),(_ucs2 0x0147); +insert into t1 values (_ucs2 0x0148),(_ucs2 0x0149),(_ucs2 0x014a),(_ucs2 0x014b); +insert into t1 values (_ucs2 0x014c),(_ucs2 0x014d),(_ucs2 0x014e),(_ucs2 0x014f); +insert into t1 values (_ucs2 0x0150),(_ucs2 0x0151),(_ucs2 0x0152),(_ucs2 0x0153); +insert into t1 values (_ucs2 0x0154),(_ucs2 0x0155),(_ucs2 0x0156),(_ucs2 0x0157); +insert into t1 values (_ucs2 0x0158),(_ucs2 0x0159),(_ucs2 0x015a),(_ucs2 0x015b); +insert into t1 values (_ucs2 0x015c),(_ucs2 0x015d),(_ucs2 0x015e),(_ucs2 0x015f); +insert into t1 values (_ucs2 0x0160),(_ucs2 0x0161),(_ucs2 0x0162),(_ucs2 0x0163); +insert into t1 values (_ucs2 0x0164),(_ucs2 0x0165),(_ucs2 0x0166),(_ucs2 0x0167); +insert into t1 values (_ucs2 0x0168),(_ucs2 0x0169),(_ucs2 0x016a),(_ucs2 0x016b); +insert into t1 values (_ucs2 0x016c),(_ucs2 0x016d),(_ucs2 0x016e),(_ucs2 0x016f); +insert into t1 values (_ucs2 0x0170),(_ucs2 0x0171),(_ucs2 0x0172),(_ucs2 0x0173); +insert into t1 values (_ucs2 0x0174),(_ucs2 0x0175),(_ucs2 0x0176),(_ucs2 0x0177); +insert into t1 values (_ucs2 0x0178),(_ucs2 0x0179),(_ucs2 0x017a),(_ucs2 0x017b); +insert into t1 values (_ucs2 0x017c),(_ucs2 0x017d),(_ucs2 0x017e),(_ucs2 0x017f); +insert into t1 values (_ucs2 0x0180),(_ucs2 0x0181),(_ucs2 0x0182),(_ucs2 0x0183); +insert into t1 values (_ucs2 0x0184),(_ucs2 0x0185),(_ucs2 0x0186),(_ucs2 0x0187); +insert into t1 values (_ucs2 0x0188),(_ucs2 0x0189),(_ucs2 0x018a),(_ucs2 0x018b); +insert into t1 values (_ucs2 0x018c),(_ucs2 0x018d),(_ucs2 0x018e),(_ucs2 0x018f); +insert into t1 values (_ucs2 0x0190),(_ucs2 0x0191),(_ucs2 0x0192),(_ucs2 0x0193); +insert into t1 values (_ucs2 0x0194),(_ucs2 0x0195),(_ucs2 0x0196),(_ucs2 0x0197); +insert into t1 values (_ucs2 0x0198),(_ucs2 0x0199),(_ucs2 0x019a),(_ucs2 0x019b); +insert into t1 values (_ucs2 0x019c),(_ucs2 0x019d),(_ucs2 0x019e),(_ucs2 0x019f); +insert into t1 values (_ucs2 0x01a0),(_ucs2 0x01a1),(_ucs2 0x01a2),(_ucs2 0x01a3); +insert into t1 values (_ucs2 0x01a4),(_ucs2 0x01a5),(_ucs2 0x01a6),(_ucs2 0x01a7); +insert into t1 values (_ucs2 0x01a8),(_ucs2 0x01a9),(_ucs2 0x01aa),(_ucs2 0x01ab); +insert into t1 values (_ucs2 0x01ac),(_ucs2 0x01ad),(_ucs2 0x01ae),(_ucs2 0x01af); +insert into t1 values (_ucs2 0x01b0),(_ucs2 0x01b1),(_ucs2 0x01b2),(_ucs2 0x01b3); +insert into t1 values (_ucs2 0x01b4),(_ucs2 0x01b5),(_ucs2 0x01b6),(_ucs2 0x01b7); +insert into t1 values (_ucs2 0x01b8),(_ucs2 0x01b9),(_ucs2 0x01ba),(_ucs2 0x01bb); +insert into t1 values (_ucs2 0x01bc),(_ucs2 0x01bd),(_ucs2 0x01be),(_ucs2 0x01bf); +insert into t1 values (_ucs2 0x01c0),(_ucs2 0x01c1),(_ucs2 0x01c2),(_ucs2 0x01c3); +insert into t1 values (_ucs2 0x01c4),(_ucs2 0x01c5),(_ucs2 0x01c6),(_ucs2 0x01c7); +insert into t1 values (_ucs2 0x01c8),(_ucs2 0x01c9),(_ucs2 0x01ca),(_ucs2 0x01cb); +insert into t1 values (_ucs2 0x01cc),(_ucs2 0x01cd),(_ucs2 0x01ce),(_ucs2 0x01cf); +insert into t1 values (_ucs2 0x01d0),(_ucs2 0x01d1),(_ucs2 0x01d2),(_ucs2 0x01d3); +insert into t1 values (_ucs2 0x01d4),(_ucs2 0x01d5),(_ucs2 0x01d6),(_ucs2 0x01d7); +insert into t1 values (_ucs2 0x01d8),(_ucs2 0x01d9),(_ucs2 0x01da),(_ucs2 0x01db); +insert into t1 values (_ucs2 0x01dc),(_ucs2 0x01dd),(_ucs2 0x01de),(_ucs2 0x01df); +insert into t1 values (_ucs2 0x01e0),(_ucs2 0x01e1),(_ucs2 0x01e2),(_ucs2 0x01e3); +insert into t1 values (_ucs2 0x01e4),(_ucs2 0x01e5),(_ucs2 0x01e6),(_ucs2 0x01e7); +insert into t1 values (_ucs2 0x01e8),(_ucs2 0x01e9),(_ucs2 0x01ea),(_ucs2 0x01eb); +insert into t1 values (_ucs2 0x01ec),(_ucs2 0x01ed),(_ucs2 0x01ee),(_ucs2 0x01ef); +insert into t1 values (_ucs2 0x01f0),(_ucs2 0x01f1),(_ucs2 0x01f2),(_ucs2 0x01f3); +insert into t1 values (_ucs2 0x01f4),(_ucs2 0x01f5),(_ucs2 0x01f6),(_ucs2 0x01f7); +insert into t1 values (_ucs2 0x01f8),(_ucs2 0x01f9),(_ucs2 0x01fa),(_ucs2 0x01fb); +insert into t1 values (_ucs2 0x01fc),(_ucs2 0x01fd),(_ucs2 0x01fe),(_ucs2 0x01ff); +INSERT INTO t1 VALUES (_ucs2 0x1EA0),(_ucs2 0x1EA1),(_ucs2 0x1EA2),(_ucs2 0x1EA3); +INSERT INTO t1 VALUES (_ucs2 0x1EA4),(_ucs2 0x1EA5),(_ucs2 0x1EA6),(_ucs2 0x1EA7); +INSERT INTO t1 VALUES (_ucs2 0x1EA8),(_ucs2 0x1EA9),(_ucs2 0x1EAA),(_ucs2 0x1EAB); +INSERT INTO t1 VALUES (_ucs2 0x1EAC),(_ucs2 0x1EAD),(_ucs2 0x1EAE),(_ucs2 0x1EAF); +INSERT INTO t1 VALUES (_ucs2 0x1EB0),(_ucs2 0x1EB1),(_ucs2 0x1EB2),(_ucs2 0x1EB3); +INSERT INTO t1 VALUES (_ucs2 0x1EB4),(_ucs2 0x1EB5),(_ucs2 0x1EB6),(_ucs2 0x1EB7); +INSERT INTO t1 VALUES (_ucs2 0x1EB8),(_ucs2 0x1EB9),(_ucs2 0x1EBA),(_ucs2 0x1EBB); +INSERT INTO t1 VALUES (_ucs2 0x1EBC),(_ucs2 0x1EBD),(_ucs2 0x1EBE),(_ucs2 0x1EBF); +INSERT INTO t1 VALUES (_ucs2 0x1EC0),(_ucs2 0x1EC1),(_ucs2 0x1EC2),(_ucs2 0x1EC3); +INSERT INTO t1 VALUES (_ucs2 0x1EC4),(_ucs2 0x1EC5),(_ucs2 0x1EC6),(_ucs2 0x1EC7); +INSERT INTO t1 VALUES (_ucs2 0x1EC8),(_ucs2 0x1EC9),(_ucs2 0x1ECA),(_ucs2 0x1ECB); +INSERT INTO t1 VALUES (_ucs2 0x1ECC),(_ucs2 0x1ECD),(_ucs2 0x1ECE),(_ucs2 0x1ECF); +INSERT INTO t1 VALUES (_ucs2 0x1ED0),(_ucs2 0x1ED1),(_ucs2 0x1ED2),(_ucs2 0x1ED3); +INSERT INTO t1 VALUES (_ucs2 0x1ED4),(_ucs2 0x1ED5),(_ucs2 0x1ED6),(_ucs2 0x1ED7); +INSERT INTO t1 VALUES (_ucs2 0x1ED8),(_ucs2 0x1ED9),(_ucs2 0x1EDA),(_ucs2 0x1EDB); +INSERT INTO t1 VALUES (_ucs2 0x1EDC),(_ucs2 0x1EDD),(_ucs2 0x1EDE),(_ucs2 0x1EDF); +INSERT INTO t1 VALUES (_ucs2 0x1EE0),(_ucs2 0x1EE1),(_ucs2 0x1EE2),(_ucs2 0x1EE3); +INSERT INTO t1 VALUES (_ucs2 0x1EE4),(_ucs2 0x1EE5),(_ucs2 0x1EE6),(_ucs2 0x1EE7); +INSERT INTO t1 VALUES (_ucs2 0x1EE8),(_ucs2 0x1EE9),(_ucs2 0x1EEA),(_ucs2 0x1EEB); +INSERT INTO t1 VALUES (_ucs2 0x1EEC),(_ucs2 0x1EED),(_ucs2 0x1EEE),(_ucs2 0x1EEF); +INSERT INTO t1 VALUES (_ucs2 0x1EF0),(_ucs2 0x1EF1); +insert into t1 values ('AA'),('Aa'),('aa'),('aA'); +insert into t1 values ('AE'),('Ae'),('ae'),('aE'); +insert into t1 values ('CH'),('Ch'),('ch'),('cH'); +insert into t1 values ('DZ'),('Dz'),('dz'),('dZ'); +insert into t1 values ('DŽ'),('Dž'),('dž'),('dŽ'); +insert into t1 values ('IJ'),('Ij'),('ij'),('iJ'); +insert into t1 values ('LJ'),('Lj'),('lj'),('lJ'); +insert into t1 values ('LL'),('Ll'),('ll'),('lL'); +insert into t1 values ('NJ'),('Nj'),('nj'),('nJ'); +insert into t1 values ('OE'),('Oe'),('oe'),('oE'); +insert into t1 values ('SS'),('Ss'),('ss'),('sS'); +insert into t1 values ('RR'),('Rr'),('rr'),('rR'); +INSERT INTO t1 VALUES ('a '); +SELECT c1, HEX(WEIGHT_STRING(c1 LEVEL 1)), HEX(WEIGHT_STRING(c1 LEVEL 2)) FROM t1 ORDER BY c1, BINARY c1; +c1 HEX(WEIGHT_STRING(c1 LEVEL 1)) HEX(WEIGHT_STRING(c1 LEVEL 2)) +÷ 0552 0020 +× 0553 0020 +A 120F 0020 +a 120F 0020 +Á 120F 00200032 +á 120F 00200032 +À 120F 00200035 +à 120F 00200035 +Ă 120F 00200037 +ă 120F 00200037 +Ắ 120F 002000370032 +ắ 120F 002000370032 +Ằ 120F 002000370035 +ằ 120F 002000370035 +Ẵ 120F 00200037004E +ẵ 120F 00200037004E +Ẳ 120F 002000370064 +ẳ 120F 002000370064 + 120F 0020003C +â 120F 0020003C +Ấ 120F 0020003C0032 +ấ 120F 0020003C0032 +Ầ 120F 0020003C0035 +ầ 120F 0020003C0035 +Ẫ 120F 0020003C004E +ẫ 120F 0020003C004E +Ẩ 120F 0020003C0064 +ẩ 120F 0020003C0064 +Ǎ 120F 00200041 +ǎ 120F 00200041 +Å 120F 00200043 +å 120F 00200043 +Ǻ 120F 002000430032 +ǻ 120F 002000430032 +Ä 120F 00200047 +ä 120F 00200047 +Ǟ 120F 00200047005B +ǟ 120F 00200047005B +à 120F 0020004E +ã 120F 0020004E +Ǡ 120F 00200052005B +ǡ 120F 00200052005B +Ą 120F 00200059 +ą 120F 00200059 +Ā 120F 0020005B +ā 120F 0020005B +Ả 120F 00200064 +ả 120F 00200064 +Ạ 120F 00200070 +ạ 120F 00200070 +Ặ 120F 002000700037 +ặ 120F 002000700037 +Ậ 120F 00200070003C +ậ 120F 00200070003C +a 120F020A 00200020 +AA 120F120F 00200020 +Aa 120F120F 00200020 +aA 120F120F 00200020 +aa 120F120F 00200020 +AE 120F126B 00200020 +Ae 120F126B 00200020 +aE 120F126B 00200020 +ae 120F126B 00200020 +Æ 120F126B 002001590020 +æ 120F126B 002001590020 +Ǽ 120F126B 0020015900200032 +ǽ 120F126B 0020015900200032 +Ǣ 120F126B 002001590020005B +ǣ 120F126B 002001590020005B +B 1225 0020 +b 1225 0020 +ƀ 122D 0020 +Ɓ 1235 0020 +Ƃ 1239 0020 +ƃ 1239 0020 +C 123D 0020 +c 123D 0020 +Ć 123D 00200032 +ć 123D 00200032 +Ĉ 123D 0020003C +ĉ 123D 0020003C +Ċ 123D 00200052 +ċ 123D 00200052 +Ç 123D 00200056 +ç 123D 00200056 +cH 123D12D3 00200020 +Č 123E 0020 +č 123E 0020 +Ƈ 1246 0020 +ƈ 1246 0020 +D 1250 0020 +d 1250 0020 +Ď 1250 00200041 +ď 1250 00200041 +Đ 1250 0020007D +đ 1250 0020007D +Ð 1250 00200159 +ð 1250 00200159 +DZ 125014AD 00200020 +Dz 125014AD 00200020 +dZ 125014AD 00200020 +dz 125014AD 00200020 +DZ 125014AD 00200020 +Dz 125014AD 00200020 +dz 125014AD 00200020 +DŽ 125014AD 002000200041 +Dž 125014AD 002000200041 +dž 125014AD 002000200041 +DŽ 125014AE 00200020 +Dž 125014AE 00200020 +dŽ 125014AE 00200020 +dž 125014AE 00200020 +Ɖ 1258 0020 +Ɗ 125C 0020 +Ƌ 1261 0020 +ƌ 1261 0020 +E 126B 0020 +e 126B 0020 +É 126B 00200032 +é 126B 00200032 +È 126B 00200035 +è 126B 00200035 +Ĕ 126B 00200037 +ĕ 126B 00200037 +Ê 126B 0020003C +ê 126B 0020003C +Ế 126B 0020003C0032 +ế 126B 0020003C0032 +Ề 126B 0020003C0035 +ề 126B 0020003C0035 +Ễ 126B 0020003C004E +ễ 126B 0020003C004E +Ể 126B 0020003C0064 +ể 126B 0020003C0064 +Ě 126B 00200041 +ě 126B 00200041 +Ë 126B 00200047 +ë 126B 00200047 +Ẽ 126B 0020004E +ẽ 126B 0020004E +Ė 126B 00200052 +ė 126B 00200052 +Ę 126B 00200059 +ę 126B 00200059 +Ē 126B 0020005B +ē 126B 0020005B +Ẻ 126B 00200064 +ẻ 126B 00200064 +Ẹ 126B 00200070 +ẹ 126B 00200070 +Ệ 126B 00200070003C +ệ 126B 00200070003C +Ǝ 1276 0020 +ǝ 1276 0020 +Ə 127B 0020 +Ɛ 1280 0020 +F 12A3 0020 +f 12A3 0020 +Ƒ 12AA 0020 +ƒ 12AA 0020 +G 12B0 0020 +g 12B0 0020 +Ǵ 12B0 00200032 +ǵ 12B0 00200032 +Ğ 12B0 00200037 +ğ 12B0 00200037 +Ĝ 12B0 0020003C +ĝ 12B0 0020003C +Ǧ 12B0 00200041 +ǧ 12B0 00200041 +Ġ 12B0 00200052 +ġ 12B0 00200052 +Ģ 12B0 00200056 +ģ 12B0 00200056 +Ǥ 12BC 0020 +ǥ 12BC 0020 +Ɠ 12C1 0020 +Ɣ 12CB 0020 +Ƣ 12CF 0020 +ƣ 12CF 0020 +H 12D3 0020 +h 12D3 0020 +Ĥ 12D3 0020003C +ĥ 12D3 0020003C +Ħ 12D3 0020007D +ħ 12D3 0020007D +CH 12D4 0020 +Ch 12D4 0020 +ch 12D4 0020 +ƕ 12DB 0020 +Ƕ 12DB 0020 +I 12EC 0020 +i 12EC 0020 +Í 12EC 00200032 +í 12EC 00200032 +Ì 12EC 00200035 +ì 12EC 00200035 +Ĭ 12EC 00200037 +ĭ 12EC 00200037 +Î 12EC 0020003C +î 12EC 0020003C +Ǐ 12EC 00200041 +ǐ 12EC 00200041 +Ï 12EC 00200047 +ï 12EC 00200047 +Ĩ 12EC 0020004E +ĩ 12EC 0020004E +İ 12EC 00200052 +Į 12EC 00200059 +į 12EC 00200059 +Ī 12EC 0020005B +ī 12EC 0020005B +Ỉ 12EC 00200064 +ỉ 12EC 00200064 +Ị 12EC 00200070 +ị 12EC 00200070 +IJ 12EC1305 00200020 +Ij 12EC1305 00200020 +iJ 12EC1305 00200020 +ij 12EC1305 00200020 +IJ 12EC1305 00200020 +ij 12EC1305 00200020 +ı 12F0 0020 +Ɨ 12FA 0020 +Ɩ 1300 0020 +J 1305 0020 +j 1305 0020 +Ĵ 1305 0020003C +ĵ 1305 0020003C +ǰ 1305 00200041 +K 131E 0020 +k 131E 0020 +Ǩ 131E 00200041 +ǩ 131E 00200041 +Ķ 131E 00200056 +ķ 131E 00200056 +Ƙ 1324 0020 +ƙ 1324 0020 +L 1330 0020 +l 1330 0020 +Ĺ 1330 00200032 +ĺ 1330 00200032 +Ľ 1330 00200041 +ľ 1330 00200041 +Ļ 1330 00200056 +ļ 1330 00200056 +Ł 1330 0020007D +ł 1330 0020007D +Ŀ 1330 00200159 +ŀ 1330 00200159 +LJ 13301305 00200020 +Lj 13301305 00200020 +lJ 13301305 00200020 +lj 13301305 00200020 +LJ 13301305 00200020 +Lj 13301305 00200020 +lj 13301305 00200020 +LL 13301330 00200020 +Ll 13301330 00200020 +lL 13301330 00200020 +ll 13301330 00200020 +ƚ 133B 0020 +ƛ 1357 0020 +M 135F 0020 +m 135F 0020 +N 136D 0020 +n 136D 0020 +Ń 136D 00200032 +ń 136D 00200032 +Ǹ 136D 00200035 +ǹ 136D 00200035 +Ň 136D 00200041 +ň 136D 00200041 +Ñ 136D 0020004E +ñ 136D 0020004E +Ņ 136D 00200056 +ņ 136D 00200056 +NJ 136D1305 00200020 +Nj 136D1305 00200020 +nJ 136D1305 00200020 +nj 136D1305 00200020 +NJ 136D1305 00200020 +Nj 136D1305 00200020 +nj 136D1305 00200020 +Ɲ 1378 0020 +ƞ 137C 0020 +Ŋ 138A 0020 +ŋ 138A 0020 +O 138E 0020 +o 138E 0020 +Ó 138E 00200032 +ó 138E 00200032 +Ò 138E 00200035 +ò 138E 00200035 +Ŏ 138E 00200037 +ŏ 138E 00200037 +Ô 138E 0020003C +ô 138E 0020003C +Ố 138E 0020003C0032 +ố 138E 0020003C0032 +Ồ 138E 0020003C0035 +ồ 138E 0020003C0035 +Ỗ 138E 0020003C004E +ỗ 138E 0020003C004E +Ổ 138E 0020003C0064 +ổ 138E 0020003C0064 +Ǒ 138E 00200041 +ǒ 138E 00200041 +Ö 138E 00200047 +ö 138E 00200047 +Ő 138E 0020004D +ő 138E 0020004D +Õ 138E 0020004E +õ 138E 0020004E +Ø 138E 00200054 +ø 138E 00200054 +Ǿ 138E 002000540032 +ǿ 138E 002000540032 +Ǫ 138E 00200059 +ǫ 138E 00200059 +Ǭ 138E 00200059005B +ǭ 138E 00200059005B +Ō 138E 0020005B +ō 138E 0020005B +Ỏ 138E 00200064 +ỏ 138E 00200064 +Ơ 138E 00200068 +ơ 138E 00200068 +Ớ 138E 002000680032 +ớ 138E 002000680032 +Ờ 138E 002000680035 +ờ 138E 002000680035 +Ỡ 138E 00200068004E +ỡ 138E 00200068004E +Ở 138E 002000680064 +ở 138E 002000680064 +Ợ 138E 002000680070 +ợ 138E 002000680070 +Ọ 138E 00200070 +ọ 138E 00200070 +Ộ 138E 00200070003C +ộ 138E 00200070003C +OE 138E126B 00200020 +Oe 138E126B 00200020 +oE 138E126B 00200020 +oe 138E126B 00200020 +Œ 138E126B 002001590020 +œ 138E126B 002001590020 +Ɔ 139A 0020 +Ɵ 13A5 0020 +P 13B3 0020 +p 13B3 0020 +Ƥ 13BC 0020 +ƥ 13BC 0020 +Q 13C8 0020 +q 13C8 0020 +ĸ 13D6 0020 +R 13DA 0020 +r 13DA 0020 +Ŕ 13DA 00200032 +ŕ 13DA 00200032 +Ŗ 13DA 00200056 +ŗ 13DA 00200056 +RR 13DA13DA 00200020 +Rr 13DA13DA 00200020 +rR 13DA13DA 00200020 +rr 13DA13DA 00200020 +Ř 13DB 0020 +ř 13DB 0020 +Ʀ 13DE 0020 +S 1410 0020 +s 1410 0020 +Ś 1410 00200032 +ś 1410 00200032 +Ŝ 1410 0020003C +ŝ 1410 0020003C +Ş 1410 00200056 +ş 1410 00200056 +ſ 1410 0020015A +SS 14101410 00200020 +Ss 14101410 00200020 +sS 14101410 00200020 +ss 14101410 00200020 +ß 14101410 002001590020 +Š 1411 0020 +š 1411 0020 +Ʃ 1421 0020 +ƪ 1426 0020 +T 1433 0020 +t 1433 0020 +Ť 1433 00200041 +ť 1433 00200041 +Ţ 1433 00200056 +ţ 1433 00200056 +ƾ 14331410 00200020 +Ŧ 1438 0020 +ŧ 1438 0020 +ƫ 143E 0020 +Ƭ 1442 0020 +ƭ 1442 0020 +Ʈ 1446 0020 +U 1453 0020 +u 1453 0020 +Ú 1453 00200032 +ú 1453 00200032 +Ù 1453 00200035 +ù 1453 00200035 +Ŭ 1453 00200037 +ŭ 1453 00200037 +Û 1453 0020003C +û 1453 0020003C +Ǔ 1453 00200041 +ǔ 1453 00200041 +Ů 1453 00200043 +ů 1453 00200043 +Ü 1453 00200047 +ü 1453 00200047 +Ǘ 1453 002000470032 +ǘ 1453 002000470032 +Ǜ 1453 002000470035 +ǜ 1453 002000470035 +Ǚ 1453 002000470041 +ǚ 1453 002000470041 +Ǖ 1453 00200047005B +ǖ 1453 00200047005B +Ű 1453 0020004D +ű 1453 0020004D +Ũ 1453 0020004E +ũ 1453 0020004E +Ų 1453 00200059 +ų 1453 00200059 +Ū 1453 0020005B +ū 1453 0020005B +Ủ 1453 00200064 +ủ 1453 00200064 +Ư 1453 00200068 +ư 1453 00200068 +Ứ 1453 002000680032 +ứ 1453 002000680032 +Ừ 1453 002000680035 +ừ 1453 002000680035 +Ữ 1453 00200068004E +ữ 1453 00200068004E +Ử 1453 002000680064 +ử 1453 002000680064 +Ự 1453 002000680070 +ự 1453 002000680070 +Ụ 1453 00200070 +ụ 1453 00200070 +Ɯ 146D 0020 +Ʊ 1476 0020 +V 147B 0020 +v 147B 0020 +Ʋ 1482 0020 +W 148D 0020 +w 148D 0020 +Ŵ 148D 0020003C +ŵ 148D 0020003C +X 1497 0020 +x 1497 0020 +Y 149C 0020 +y 149C 0020 +Ý 149C 00200032 +ý 149C 00200032 +Ŷ 149C 0020003C +ŷ 149C 0020003C +ÿ 149C 00200047 +Ÿ 149C 00200047 +Ƴ 14A8 0020 +ƴ 14A8 0020 +Z 14AD 0020 +z 14AD 0020 +Ź 14AD 00200032 +ź 14AD 00200032 +Ż 14AD 00200052 +ż 14AD 00200052 +ƍ 14AD148D 00200020 +Ž 14AE 0020 +ž 14AE 0020 +Ƶ 14B2 0020 +ƶ 14B2 0020 +Ʒ 14CA 0020 +Ǯ 14CA 00200041 +ǯ 14CA 00200041 +Ƹ 14CF 0020 +ƹ 14CF 0020 +ƺ 14D4 0020 +Þ 14E0 0020 +þ 14E0 0020 +ƿ 14E6 0020 +Ƿ 14E6 0020 +ƻ 14EF 0020 +Ƨ 14F6 0020 +ƨ 14F6 0020 +Ƽ 14FA 0020 +ƽ 14FA 0020 +Ƅ 14FE 0020 +ƅ 14FE 0020 +ʼn 150B136D 00200020 +ǀ 1525 0020 +ǁ 1529 0020 +ǂ 152D 0020 +ǃ 1531 0020 +SELECT c1, HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 1)), HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 2)) FROM t1 WHERE c1 BETWEEN 'a' AND 'aZ' ORDER BY c1, BINARY c1; +c1 HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 1)) HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 2)) +A 120F02000200 002000200020 +a 120F02000200 002000200020 +Á 120F02000200 002000320020 +á 120F02000200 002000320020 +À 120F02000200 002000350020 +à 120F02000200 002000350020 +Ă 120F02000200 002000370020 +ă 120F02000200 002000370020 +Ắ 120F02000200 002000370032 +ắ 120F02000200 002000370032 +Ằ 120F02000200 002000370035 +ằ 120F02000200 002000370035 +Ẵ 120F02000200 00200037004E +ẵ 120F02000200 00200037004E +Ẳ 120F02000200 002000370064 +ẳ 120F02000200 002000370064 + 120F02000200 0020003C0020 +â 120F02000200 0020003C0020 +Ấ 120F02000200 0020003C0032 +ấ 120F02000200 0020003C0032 +Ầ 120F02000200 0020003C0035 +ầ 120F02000200 0020003C0035 +Ẫ 120F02000200 0020003C004E +ẫ 120F02000200 0020003C004E +Ẩ 120F02000200 0020003C0064 +ẩ 120F02000200 0020003C0064 +Ǎ 120F02000200 002000410020 +ǎ 120F02000200 002000410020 +Å 120F02000200 002000430020 +å 120F02000200 002000430020 +Ǻ 120F02000200 002000430032 +ǻ 120F02000200 002000430032 +Ä 120F02000200 002000470020 +ä 120F02000200 002000470020 +Ǟ 120F02000200 00200047005B +ǟ 120F02000200 00200047005B +à 120F02000200 0020004E0020 +ã 120F02000200 0020004E0020 +Ǡ 120F02000200 00200052005B +ǡ 120F02000200 00200052005B +Ą 120F02000200 002000590020 +ą 120F02000200 002000590020 +Ā 120F02000200 0020005B0020 +ā 120F02000200 0020005B0020 +Ả 120F02000200 002000640020 +ả 120F02000200 002000640020 +Ạ 120F02000200 002000700020 +ạ 120F02000200 002000700020 +Ặ 120F02000200 002000700037 +ặ 120F02000200 002000700037 +Ậ 120F02000200 00200070003C +ậ 120F02000200 00200070003C +a 120F020A0200 002000200020 +AA 120F120F0200 002000200020 +Aa 120F120F0200 002000200020 +aA 120F120F0200 002000200020 +aa 120F120F0200 002000200020 +AE 120F126B0200 002000200020 +Ae 120F126B0200 002000200020 +aE 120F126B0200 002000200020 +ae 120F126B0200 002000200020 +Æ 120F126B0200 002001590020 +æ 120F126B0200 002001590020 +Ǽ 120F126B0200 002001590020 +ǽ 120F126B0200 002001590020 +Ǣ 120F126B0200 002001590020 +ǣ 120F126B0200 002001590020 +DROP TABLE t1; +SELECT 'a' = 'a '; +'a' = 'a ' +0 +SELECT 'a' < 'á'; +'a' < 'á' +1 +SELECT 'áa' < 'ab'; +'áa' < 'ab' +1 +SELECT 'á' < 'ä'; +'á' < 'ä' +1 +SELECT 'äa' < 'áb'; +'äa' < 'áb' +1 +SELECT 'c' < 'č'; +'c' < 'č' +1 +SELECT 'cb' < 'ča'; +'cb' < 'ča' +1 +SELECT 'd' < 'ď'; +'d' < 'ď' +1 +SELECT 'ďa' < 'db'; +'ďa' < 'db' +1 +SELECT 'e' < 'é'; +'e' < 'é' +1 +SELECT 'éa' < 'eb'; +'éa' < 'eb' +1 +SELECT 'é' < 'ě'; +'é' < 'ě' +1 +SELECT 'ěa' < 'éb'; +'ěa' < 'éb' +1 +SELECT 'i' < 'í'; +'i' < 'í' +1 +SELECT 'ía' < 'ib'; +'ía' < 'ib' +1 +SELECT 'n' < 'ň'; +'n' < 'ň' +1 +SELECT 'ňa' < 'nb'; +'ňa' < 'nb' +1 +SELECT 'o' < 'ó'; +'o' < 'ó' +1 +SELECT 'óa' < 'ob'; +'óa' < 'ob' +1 +SELECT 'ó' < 'ö'; +'ó' < 'ö' +1 +SELECT 'öa' < 'ób'; +'öa' < 'ób' +1 +SELECT 'r' < 'ř'; +'r' < 'ř' +1 +SELECT 'rb' < 'řa'; +'rb' < 'řa' +1 +SELECT 's' < 'š'; +'s' < 'š' +1 +SELECT 'sb' < 'ša'; +'sb' < 'ša' +1 +SELECT 't' < 'ť'; +'t' < 'ť' +1 +SELECT 'ťa' < 'tb'; +'ťa' < 'tb' +1 +SELECT 'u' < 'ú'; +'u' < 'ú' +1 +SELECT 'úa' < 'ub'; +'úa' < 'ub' +1 +SELECT 'ú' < 'ů'; +'ú' < 'ů' +1 +SELECT 'ůa' < 'úb'; +'ůa' < 'úb' +1 +SELECT 'ů' < 'ü'; +'ů' < 'ü' +1 +SELECT 'üa' < 'ůb'; +'üa' < 'ůb' +1 +SELECT 'y' < 'ý'; +'y' < 'ý' +1 +SELECT 'ýa' < 'yb'; +'ýa' < 'yb' +1 +SELECT 'z' < 'ž'; +'z' < 'ž' +1 +SELECT 'zb' < 'ža'; +'zb' < 'ža' +1 +SELECT 'hž' < 'ch'; +'hž' < 'ch' +1 +SELECT 'chž'< 'i'; +'chž'< 'i' +1 +SELECT 'a' COLLATE utf8_czech_test_bad_w2; +ERROR HY000: Unknown collation: 'utf8_czech_test_bad_w2' diff --git a/mysql-test/std_data/ldml/Index.xml b/mysql-test/std_data/ldml/Index.xml index 55e754c7009..0435b2ab689 100644 --- a/mysql-test/std_data/ldml/Index.xml +++ b/mysql-test/std_data/ldml/Index.xml @@ -1167,6 +1167,45 @@ </rules> </collation> + <collation name="utf8_czech_test_w2" id="370" version="5.2.0"> + <settings strength="2"/> + <rules> + <reset>C</reset><p>\u010D</p><t>\u010C</t> + <reset>H</reset><p>ch</p><t>Ch</t><t>CH</t> + <reset>R</reset><p>\u0159</p><t>\u0158</t> + <reset>S</reset><p>\u0161</p><t>\u0160</t> + <reset>Z</reset><p>\u017E</p><t>\u017D</t> + </rules> + </collation> + + <collation name="utf8_czech_test_nopad_w2" id="371" version="5.2.0" flag="nopad"> + <settings strength="2"/> + <rules> + <reset>C</reset><p>\u010D</p><t>\u010C</t> + <reset>H</reset><p>ch</p><t>Ch</t><t>CH</t> + <reset>R</reset><p>\u0159</p><t>\u0158</t> + <reset>S</reset><p>\u0161</p><t>\u0160</t> + <reset>Z</reset><p>\u017E</p><t>\u017D</t> + </rules> + </collation> + + <!-- + This collation definition is bad. + It uses Unicode-4.0.0 (the default version), and requests strength="2". + Unicode-4.0.0 does not have information about the secondary weight level. + The version="5.2.0" collation attribute was forgotten in this definition. + --> + <collation name="utf8_czech_test_bad_w2" id="372"> + <settings strength="2"/> + <rules> + <reset>C</reset><p>\u010D</p><t>\u010C</t> + <reset>H</reset><p>ch</p><t>Ch</t><t>CH</t> + <reset>R</reset><p>\u0159</p><t>\u0158</t> + <reset>S</reset><p>\u0161</p><t>\u0160</t> + <reset>Z</reset><p>\u017E</p><t>\u017D</t> + </rules> + </collation> + </charset> </charsets> diff --git a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result index 375d8b72f3c..12a234a1bde 100644 --- a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result +++ b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result @@ -419,6 +419,9 @@ ucs2_vn_ci ucs2 359 8 ucs2_5624_1 ucs2 360 8 utf8_5624_5 utf8 368 8 utf8_5624_5_bad utf8 369 8 +utf8_czech_test_w2 utf8 370 4 +utf8_czech_test_nopad_w2 utf8 371 4 +utf8_czech_test_bad_w2 utf8 372 4 utf32_test_ci utf32 391 8 utf8_maxuserid_ci utf8 2047 8 show collation like '%test%'; @@ -427,6 +430,9 @@ latin1_test latin1 99 Yes 1 latin1_test2 latin1 332 1 latin1_test2_cs latin1 333 1 utf8_test_ci utf8 353 8 +utf8_czech_test_w2 utf8 370 4 +utf8_czech_test_nopad_w2 utf8 371 4 +utf8_czech_test_bad_w2 utf8 372 4 ucs2_test_ci ucs2 358 8 utf8mb4_test_ci utf8mb4 326 8 utf8mb4_test_400_ci utf8mb4 328 8 diff --git a/mysql-test/t/ctype_ldml.test b/mysql-test/t/ctype_ldml.test index 956e48ba4af..1d58daa89e4 100644 --- a/mysql-test/t/ctype_ldml.test +++ b/mysql-test/t/ctype_ldml.test @@ -499,3 +499,106 @@ SELECT HEX(a), REPLACE(a,' ','<SP>') FROM t1 WHERE a='a'; SELECT HEX(a), REPLACE(a,' ','<SP>') FROM t1 ORDER BY a; SELECT HEX(a), REPLACE(a,' ','<SP>') FROM t1 ORDER BY a DESC; DROP TABLE t1; + + +SET NAMES utf8 COLLATE utf8_czech_test_w2; +CREATE TABLE t1 AS SELECT SPACE(10) AS c1 LIMIT 0; +--source include/ctype_unicode_latin.inc +INSERT INTO t1 VALUES ('a '); +SELECT c1, HEX(WEIGHT_STRING(c1 LEVEL 1)), HEX(WEIGHT_STRING(c1 LEVEL 2)) FROM t1 ORDER BY c1, BINARY c1; +SELECT c1, HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 1)), HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 2)) FROM t1 WHERE c1 BETWEEN 'a' AND 'aZ' ORDER BY c1, BINARY c1; +DROP TABLE t1; + +SELECT 'a' = 'a '; +SELECT 'a' < 'á'; +SELECT 'áa' < 'ab'; +SELECT 'á' < 'ä'; +SELECT 'äa' < 'áb'; +SELECT 'c' < 'č'; +SELECT 'cb' < 'ča'; +SELECT 'd' < 'ď'; +SELECT 'ďa' < 'db'; +SELECT 'e' < 'é'; +SELECT 'éa' < 'eb'; +SELECT 'é' < 'ě'; +SELECT 'ěa' < 'éb'; +SELECT 'i' < 'í'; +SELECT 'ía' < 'ib'; +SELECT 'n' < 'ň'; +SELECT 'ňa' < 'nb'; +SELECT 'o' < 'ó'; +SELECT 'óa' < 'ob'; +SELECT 'ó' < 'ö'; +SELECT 'öa' < 'ób'; +SELECT 'r' < 'ř'; +SELECT 'rb' < 'řa'; +SELECT 's' < 'š'; +SELECT 'sb' < 'ša'; +SELECT 't' < 'ť'; +SELECT 'ťa' < 'tb'; +SELECT 'u' < 'ú'; +SELECT 'úa' < 'ub'; +SELECT 'ú' < 'ů'; +SELECT 'ůa' < 'úb'; +SELECT 'ů' < 'ü'; +SELECT 'üa' < 'ůb'; +SELECT 'y' < 'ý'; +SELECT 'ýa' < 'yb'; +SELECT 'z' < 'ž'; +SELECT 'zb' < 'ža'; +SELECT 'hž' < 'ch'; +SELECT 'chž'< 'i'; + + + +SET NAMES utf8 COLLATE utf8_czech_test_nopad_w2; +CREATE TABLE t1 AS SELECT SPACE(10) AS c1 LIMIT 0; +--source include/ctype_unicode_latin.inc +INSERT INTO t1 VALUES ('a '); +SELECT c1, HEX(WEIGHT_STRING(c1 LEVEL 1)), HEX(WEIGHT_STRING(c1 LEVEL 2)) FROM t1 ORDER BY c1, BINARY c1; +SELECT c1, HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 1)), HEX(WEIGHT_STRING(c1 AS CHAR(3) LEVEL 2)) FROM t1 WHERE c1 BETWEEN 'a' AND 'aZ' ORDER BY c1, BINARY c1; +DROP TABLE t1; + +SELECT 'a' = 'a '; +SELECT 'a' < 'á'; +SELECT 'áa' < 'ab'; +SELECT 'á' < 'ä'; +SELECT 'äa' < 'áb'; +SELECT 'c' < 'č'; +SELECT 'cb' < 'ča'; +SELECT 'd' < 'ď'; +SELECT 'ďa' < 'db'; +SELECT 'e' < 'é'; +SELECT 'éa' < 'eb'; +SELECT 'é' < 'ě'; +SELECT 'ěa' < 'éb'; +SELECT 'i' < 'í'; +SELECT 'ía' < 'ib'; +SELECT 'n' < 'ň'; +SELECT 'ňa' < 'nb'; +SELECT 'o' < 'ó'; +SELECT 'óa' < 'ob'; +SELECT 'ó' < 'ö'; +SELECT 'öa' < 'ób'; +SELECT 'r' < 'ř'; +SELECT 'rb' < 'řa'; +SELECT 's' < 'š'; +SELECT 'sb' < 'ša'; +SELECT 't' < 'ť'; +SELECT 'ťa' < 'tb'; +SELECT 'u' < 'ú'; +SELECT 'úa' < 'ub'; +SELECT 'ú' < 'ů'; +SELECT 'ůa' < 'úb'; +SELECT 'ů' < 'ü'; +SELECT 'üa' < 'ůb'; +SELECT 'y' < 'ý'; +SELECT 'ýa' < 'yb'; +SELECT 'z' < 'ž'; +SELECT 'zb' < 'ža'; +SELECT 'hž' < 'ch'; +SELECT 'chž'< 'i'; + + +--error ER_UNKNOWN_COLLATION +SELECT 'a' COLLATE utf8_czech_test_bad_w2; diff --git a/mysys/charset.c b/mysys/charset.c index 016d0fc3012..8939b6d7a4f 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -258,12 +258,38 @@ static my_bool simple_cs_is_full(CHARSET_INFO *cs) #if defined(HAVE_UCA_COLLATIONS) && (defined(HAVE_CHARSET_ucs2) || defined(HAVE_CHARSET_utf8)) +/** + Initialize a loaded collation. + @param [OUT] to - The new charset_info_st structure to initialize. + @param [IN] from - A template collation, to fill the missing data from. + @param [IN] loaded - The collation data loaded from the LDML file. + some data may be missing in "loaded". +*/ static void -copy_uca_collation(struct charset_info_st *to, CHARSET_INFO *from) +copy_uca_collation(struct charset_info_st *to, CHARSET_INFO *from, + CHARSET_INFO *loaded) { to->cset= from->cset; to->coll= from->coll; - to->strxfrm_multiply= from->strxfrm_multiply; + /* + Single-level UCA collation have strnxfrm_multiple=8. + In case of a multi-level UCA collation we use strnxfrm_multiply=4. + That means MY_COLLATION_HANDLER::strnfrmlen() will request the caller + to allocate a buffer smaller size for each level, for performance purpose, + and to fit longer VARCHARs to @@max_sort_length. + This makes filesort produce non-precise order for some rare Unicode + characters that produce more than 4 weights (long expansions). + UCA requires 2 bytes per weight multiplied by the number of levels. + In case of a 2-level collation, each character requires 4*2=8 bytes. + Therefore, the longest VARCHAR that fits into the default @@max_sort_length + is 1024/8=VARCHAR(128). With strnxfrm_multiply==8, only VARCHAR(64) + would fit. + Note, the built-in collation utf8_thai_520_w2 also uses strnxfrm_multiply=4, + for the same purpose. + TODO: we could add a new LDML syntax to choose strxfrm_multiply value. + */ + to->strxfrm_multiply= loaded->levels_for_order > 1 ? + 4 : from->strxfrm_multiply; to->min_sort_char= from->min_sort_char; to->max_sort_char= from->max_sort_char; to->mbminlen= from->mbminlen; @@ -312,7 +338,8 @@ static int add_collation(struct charset_info_st *cs) #if defined(HAVE_CHARSET_ucs2) && defined(HAVE_UCA_COLLATIONS) copy_uca_collation(newcs, newcs->state & MY_CS_NOPAD ? &my_charset_ucs2_unicode_nopad_ci : - &my_charset_ucs2_unicode_ci); + &my_charset_ucs2_unicode_ci, + cs); newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED | MY_CS_NONASCII; #endif } @@ -321,7 +348,8 @@ static int add_collation(struct charset_info_st *cs) #if defined (HAVE_CHARSET_utf8) && defined(HAVE_UCA_COLLATIONS) copy_uca_collation(newcs, newcs->state & MY_CS_NOPAD ? &my_charset_utf8_unicode_nopad_ci : - &my_charset_utf8_unicode_ci); + &my_charset_utf8_unicode_ci, + cs); newcs->ctype= my_charset_utf8_unicode_ci.ctype; if (init_state_maps(newcs)) return MY_XML_ERROR; @@ -332,7 +360,8 @@ static int add_collation(struct charset_info_st *cs) #if defined (HAVE_CHARSET_utf8mb4) && defined(HAVE_UCA_COLLATIONS) copy_uca_collation(newcs, newcs->state & MY_CS_NOPAD ? &my_charset_utf8mb4_unicode_nopad_ci : - &my_charset_utf8mb4_unicode_ci); + &my_charset_utf8mb4_unicode_ci, + cs); newcs->ctype= my_charset_utf8mb4_unicode_ci.ctype; newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED; #endif @@ -342,7 +371,8 @@ static int add_collation(struct charset_info_st *cs) #if defined (HAVE_CHARSET_utf16) && defined(HAVE_UCA_COLLATIONS) copy_uca_collation(newcs, newcs->state & MY_CS_NOPAD ? &my_charset_utf16_unicode_nopad_ci : - &my_charset_utf16_unicode_ci); + &my_charset_utf16_unicode_ci, + cs); newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED | MY_CS_NONASCII; #endif } @@ -351,7 +381,8 @@ static int add_collation(struct charset_info_st *cs) #if defined (HAVE_CHARSET_utf32) && defined(HAVE_UCA_COLLATIONS) copy_uca_collation(newcs, newcs->state & MY_CS_NOPAD ? &my_charset_utf32_unicode_nopad_ci : - &my_charset_utf32_unicode_ci); + &my_charset_utf32_unicode_ci, + cs); newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED | MY_CS_NONASCII; #endif } diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c index 73a813feed9..79ad8ca7302 100644 --- a/strings/ctype-uca.c +++ b/strings/ctype-uca.c @@ -6542,6 +6542,17 @@ MY_UCA_INFO my_uca_v400= }, 0 /* levelno */ }, + { + 0, + NULL, + NULL, + { + 0, + NULL, + NULL + }, + 1 /* levelno */ + }, }, /* Logical positions */ @@ -30134,6 +30145,18 @@ MY_UCA_INFO my_uca_v520= }, 0 /* levelno */ }, + + { + 0x10FFFF, /* maxchar */ + (uchar *) uca520_length_w2, + (uint16 **) uca520_weight_w2, + { /* Contractions: */ + 0, /* nitems */ + NULL, /* item */ + NULL /* flags */ + }, + 1 /* levelno */ + }, }, 0x0009, /* first_non_ignorable p != ignore */ @@ -31851,6 +31874,25 @@ static int my_strnncoll_uca_multilevel(CHARSET_INFO *cs, } +static int +my_strnncollsp_generic_uca_nopad_multilevel(CHARSET_INFO *cs, + const uchar *s, size_t slen, + const uchar *t, size_t tlen) +{ + uint num_level= cs->levels_for_order; + uint i; + for (i= 0; i != num_level; i++) + { + int ret= my_strnncoll_uca_onelevel(cs, &my_any_uca_scanner_handler, + &cs->uca->level[i], + s, slen, t, tlen, FALSE); + if (ret) + return ret; + } + return 0; +} + + static inline int my_space_weight(const MY_UCA_WEIGHT_LEVEL *level) { @@ -32181,6 +32223,16 @@ my_strnxfrm_uca_onelevel(CHARSET_INFO *cs, } +/* + Return the minimum possible weight on a level. +*/ +static uint min_weight_on_level(MY_UCA_WEIGHT_LEVEL *level) +{ + DBUG_ASSERT(level->levelno < 2); /* No 3-level NOPAD collations yet */ + return level->levelno == 0 ? 0x0200 : 0x0020; +} + + static uchar * my_strnxfrm_uca_nopad_onelevel(CHARSET_INFO *cs, my_uca_scanner_handler *scanner_handler, @@ -32194,12 +32246,9 @@ my_strnxfrm_uca_nopad_onelevel(CHARSET_INFO *cs, dst, de, &nweights, src, srclen); DBUG_ASSERT(dst <= de); - /* - Pad with the minimum possible primary weight 0x0200. - */ - DBUG_ASSERT(level->levelno == 0); /* No multi-level NOPAD collations yet */ + /* Pad with the minimum possible weight on this level */ if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE)) - dst= my_strnxfrm_uca_padn(dst, de, nweights, 0x0200); + dst= my_strnxfrm_uca_padn(dst, de, nweights, min_weight_on_level(level)); DBUG_ASSERT(dst <= de); my_strxfrm_desc_and_reverse(d0, dst, flags, 0); return dst; @@ -32294,7 +32343,12 @@ my_strnxfrm_uca_multilevel(CHARSET_INFO *cs, { if (!(flags & MY_STRXFRM_LEVEL_ALL) || (flags & (MY_STRXFRM_LEVEL1 << current_level))) - dst= my_strnxfrm_uca_onelevel(cs, scanner_handler, + dst= cs->state & MY_CS_NOPAD ? + my_strnxfrm_uca_nopad_onelevel(cs, scanner_handler, + &cs->uca->level[current_level], + dst, de, nweights, + src, srclen, flags) : + my_strnxfrm_uca_onelevel(cs, scanner_handler, &cs->uca->level[current_level], dst, de, nweights, src, srclen, flags); @@ -32970,6 +33024,7 @@ typedef enum typedef struct my_coll_rules_st { uint version; /* Unicode version, e.g. 400 or 520 */ + uint strength; /* Number of levels */ MY_UCA_INFO *uca; /* Unicode weight data */ size_t nrules; /* Number of rules in the rule array */ size_t mrules; /* Number of allocated rules */ @@ -33251,6 +33306,10 @@ my_coll_parser_scan_setting(MY_COLL_RULE_PARSER *p) { rules->shift_after_method= my_shift_method_simple; } + else if (!lex_cmp(lexem, C_STRING_WITH_LEN("[strength 1]"))) + rules->strength= 1; + else if (!lex_cmp(lexem, C_STRING_WITH_LEN("[strength 2]"))) + rules->strength= 2; else { return 0; @@ -34189,6 +34248,10 @@ init_weight_level(MY_CHARSET_LOADER *loader, MY_COLL_RULES *rules, } +MY_COLLATION_HANDLER my_collation_any_uca_handler_multilevel; +MY_COLLATION_HANDLER my_collation_generic_uca_nopad_handler_multilevel; + + /* This function copies an UCS2 collation from the default Unicode Collation Algorithm (UCA) @@ -34213,66 +34276,6 @@ create_tailoring(struct charset_info_st *cs, MY_COLL_RULES rules; MY_UCA_INFO new_uca, *src_uca= NULL; int rc= 0; - - *loader->error= '\0'; - - if (!cs->tailoring) - return 0; /* Ok to add a collation without tailoring */ - - memset(&rules, 0, sizeof(rules)); - rules.loader= loader; - rules.uca= cs->uca ? cs->uca : &my_uca_v400; /* For logical positions, etc */ - memset(&new_uca, 0, sizeof(new_uca)); - - /* Parse ICU Collation Customization expression */ - if ((rc= my_coll_rule_parse(&rules, - cs->tailoring, - cs->tailoring + strlen(cs->tailoring)))) - goto ex; - - if (rules.version == 520) /* Unicode-5.2.0 requested */ - { - src_uca= &my_uca_v520; - cs->caseinfo= &my_unicase_unicode520; - } - else if (rules.version == 400) /* Unicode-4.0.0 requested */ - { - src_uca= &my_uca_v400; - cs->caseinfo= &my_unicase_default; - } - else /* No Unicode version specified */ - { - src_uca= cs->uca ? cs->uca : &my_uca_v400; - if (!cs->caseinfo) - cs->caseinfo= &my_unicase_default; - } - - if ((rc= init_weight_level(loader, &rules, - &new_uca.level[0], &src_uca->level[0]))) - goto ex; - - if (!(cs->uca= (MY_UCA_INFO *) (loader->once_alloc)(sizeof(MY_UCA_INFO)))) - { - rc= 1; - goto ex; - } - cs->uca[0]= new_uca; - -ex: - (loader->free)(rules.rule); - if (rc != 0 && loader->error[0]) - loader->reporter(ERROR_LEVEL, "%s", loader->error); - return rc; -} - -static my_bool -create_tailoring_multilevel(struct charset_info_st *cs, - MY_CHARSET_LOADER *loader) -{ - uint num_level= cs->levels_for_order; - MY_COLL_RULES rules; - MY_UCA_INFO new_uca, *src_uca= NULL; - int rc= 0; uint i; *loader->error= '\0'; @@ -34307,9 +34310,17 @@ create_tailoring_multilevel(struct charset_info_st *cs, if (!cs->caseinfo) cs->caseinfo= &my_unicase_default; } + cs->levels_for_order= rules.strength ? rules.strength : 1; - for (i= 0; i != num_level; i++) + for (i= 0; i != cs->levels_for_order; i++) { + if ((rc= (src_uca->level[i].maxchar == 0))) + { + my_snprintf(loader->error, sizeof(loader->error) - 1, + "%s: no level #%d data for this Unicode version.", + cs->name, i + 1); + goto ex; + } if ((rc= init_weight_level(loader, &rules, &new_uca.level[i], &src_uca->level[i]))) goto ex; @@ -34321,6 +34332,10 @@ create_tailoring_multilevel(struct charset_info_st *cs, goto ex; } cs->uca[0]= new_uca; + if (cs->levels_for_order > 1) + cs->coll= (cs->state & MY_CS_NOPAD) ? + &my_collation_generic_uca_nopad_handler_multilevel : + &my_collation_any_uca_handler_multilevel; ex: (loader->free)(rules.rule); @@ -34345,16 +34360,6 @@ my_coll_init_uca(struct charset_info_st *cs, MY_CHARSET_LOADER *loader) return create_tailoring(cs, loader); } -static my_bool -my_coll_init_uca_multilevel(struct charset_info_st *cs, - MY_CHARSET_LOADER *loader) -{ - cs->pad_char= ' '; - cs->ctype= my_charset_utf8_unicode_ci.ctype; - if (!cs->caseinfo) - cs->caseinfo= &my_unicase_default; - return create_tailoring_multilevel(cs, loader); -} static int my_strnncoll_any_uca(CHARSET_INFO *cs, const uchar *s, size_t slen, @@ -34489,7 +34494,7 @@ MY_COLLATION_HANDLER my_collation_generic_uca_nopad_handler = MY_COLLATION_HANDLER my_collation_any_uca_handler_multilevel= { - my_coll_init_uca_multilevel, + my_coll_init_uca, my_strnncoll_any_uca_multilevel, my_strnncollsp_any_uca_multilevel, my_strnxfrm_any_uca_multilevel, @@ -34503,6 +34508,22 @@ MY_COLLATION_HANDLER my_collation_any_uca_handler_multilevel= }; +MY_COLLATION_HANDLER my_collation_generic_uca_nopad_handler_multilevel = +{ + my_coll_init_uca, + my_strnncoll_any_uca_multilevel, + my_strnncollsp_generic_uca_nopad_multilevel, + my_strnxfrm_any_uca_multilevel, + my_strnxfrmlen_any_uca_multilevel, + my_like_range_generic, + my_wildcmp_uca, + NULL, + my_instr_mb, + my_hash_sort_generic_uca_nopad, + my_propagate_complex +}; + + #ifdef HAVE_CHARSET_ucs2 /* UCS2 optimized CHARSET_INFO compatible wrappers. @@ -35342,7 +35363,7 @@ struct charset_info_st my_charset_ucs2_thai_520_w2= "ucs2", /* csname */ "ucs2_thai_520_w2", /* name */ "", /* comment */ - "", /* tailoring */ + "[strength 2]", /* tailoring */ NULL, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -36363,7 +36384,7 @@ struct charset_info_st my_charset_utf8_thai_520_w2= MY_UTF8MB3, /* csname */ MY_UTF8MB3 "_thai_520_w2",/* name */ "", /* comment */ - "", /* tailoring */ + "[strength 2]", /* tailoring */ ctype_utf8, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -37275,7 +37296,7 @@ struct charset_info_st my_charset_utf8mb4_thai_520_w2= MY_UTF8MB4, /* csname */ MY_UTF8MB4 "_thai_520_w2", /* name */ "", /* comment */ - "", /* tailoring */ + "[strength 2]", /* tailoring */ ctype_utf8, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -38237,7 +38258,7 @@ struct charset_info_st my_charset_utf32_thai_520_w2= "utf32", /* csname */ "utf32_thai_520_w2",/* name */ "", /* comment */ - "", /* tailoring */ + "[strength 2]", /* tailoring */ NULL, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -39204,7 +39225,7 @@ struct charset_info_st my_charset_utf16_thai_520_w2= "utf16", /* cs name */ "utf16_thai_520_w2",/* name */ "", /* comment */ - "", /* tailoring */ + "[strength 2]", /* tailoring */ NULL, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ diff --git a/strings/ctype.c b/strings/ctype.c index 7348cbfa1f9..12d511162d7 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -667,6 +667,8 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len) case _CS_ST_STRENGTH: /* 1, 2, 3, 4, 5, or primary, secondary, tertiary, quaternary, identical */ rc= tailoring_append(st, "[strength %.*s]", len, attr); + if (len && attr[0] >= '1' && attr[0] <= '9') + i->cs.levels_for_order= attr[0] - '0'; break; case _CS_ST_ALTERNATE: |