Loading myisam/mi_open.c +10 −1 Original line number Diff line number Diff line Loading @@ -791,8 +791,17 @@ static void setup_key_functions(register MI_KEYDEF *keyinfo) keyinfo->get_key= _mi_get_pack_key; if (keyinfo->seg[0].flag & HA_PACK_KEY) { /* Prefix compression */ /* _mi_prefix_search() compares end-space against ASCII blank (' '). It cannot be used for character sets, that do not encode the blank character like ASCII does. UCS2 is an example. All character sets with a fixed width > 1 or a mimimum width > 1 cannot represent blank like ASCII does. In these cases we have to use _mi_seq_search() for the search. */ if (!keyinfo->seg->charset || use_strnxfrm(keyinfo->seg->charset) || (keyinfo->seg->flag & HA_NULL_PART)) (keyinfo->seg->flag & HA_NULL_PART) || (keyinfo->seg->charset->mbminlen > 1)) keyinfo->bin_search=_mi_seq_search; else keyinfo->bin_search=_mi_prefix_search; Loading mysql-test/r/myisam.result +10 −0 Original line number Diff line number Diff line Loading @@ -1839,6 +1839,16 @@ CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; CREATE TABLE t1 ( c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL, KEY(c1) ) ENGINE=MyISAM; INSERT INTO t1 VALUES ('marshall\'s'); INSERT INTO t1 VALUES ('marsh'); CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM; CREATE TABLE t2 LIKE t1; INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4); Loading mysql-test/t/myisam.test +13 −0 Original line number Diff line number Diff line Loading @@ -1193,6 +1193,19 @@ SET @@myisam_repair_threads=1; CHECK TABLE t1 EXTENDED; DROP TABLE t1; # # Bug#32705 - myisam corruption: Key in wrong position # at page 1024 with ucs2_bin # CREATE TABLE t1 ( c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL, KEY(c1) ) ENGINE=MyISAM; INSERT INTO t1 VALUES ('marshall\'s'); INSERT INTO t1 VALUES ('marsh'); CHECK TABLE t1 EXTENDED; DROP TABLE t1; # # Bug#28837: MyISAM storage engine error (134) doing delete with self-join # Loading Loading
myisam/mi_open.c +10 −1 Original line number Diff line number Diff line Loading @@ -791,8 +791,17 @@ static void setup_key_functions(register MI_KEYDEF *keyinfo) keyinfo->get_key= _mi_get_pack_key; if (keyinfo->seg[0].flag & HA_PACK_KEY) { /* Prefix compression */ /* _mi_prefix_search() compares end-space against ASCII blank (' '). It cannot be used for character sets, that do not encode the blank character like ASCII does. UCS2 is an example. All character sets with a fixed width > 1 or a mimimum width > 1 cannot represent blank like ASCII does. In these cases we have to use _mi_seq_search() for the search. */ if (!keyinfo->seg->charset || use_strnxfrm(keyinfo->seg->charset) || (keyinfo->seg->flag & HA_NULL_PART)) (keyinfo->seg->flag & HA_NULL_PART) || (keyinfo->seg->charset->mbminlen > 1)) keyinfo->bin_search=_mi_seq_search; else keyinfo->bin_search=_mi_prefix_search; Loading
mysql-test/r/myisam.result +10 −0 Original line number Diff line number Diff line Loading @@ -1839,6 +1839,16 @@ CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; CREATE TABLE t1 ( c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL, KEY(c1) ) ENGINE=MyISAM; INSERT INTO t1 VALUES ('marshall\'s'); INSERT INTO t1 VALUES ('marsh'); CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM; CREATE TABLE t2 LIKE t1; INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4); Loading
mysql-test/t/myisam.test +13 −0 Original line number Diff line number Diff line Loading @@ -1193,6 +1193,19 @@ SET @@myisam_repair_threads=1; CHECK TABLE t1 EXTENDED; DROP TABLE t1; # # Bug#32705 - myisam corruption: Key in wrong position # at page 1024 with ucs2_bin # CREATE TABLE t1 ( c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL, KEY(c1) ) ENGINE=MyISAM; INSERT INTO t1 VALUES ('marshall\'s'); INSERT INTO t1 VALUES ('marsh'); CHECK TABLE t1 EXTENDED; DROP TABLE t1; # # Bug#28837: MyISAM storage engine error (134) doing delete with self-join # Loading