Commit d81136e3 authored by bar@mysql.com's avatar bar@mysql.com

Bug 4531: unique key prefix interacts poorly with utf8

Check HEAP+HASH, binary collation
parent a7510c70
...@@ -470,6 +470,42 @@ ERROR 23000: Duplicate entry 'ꪪꪪ' for key 1 ...@@ -470,6 +470,42 @@ ERROR 23000: Duplicate entry 'ꪪꪪ' for key 1
drop table t1; drop table t1;
create table t1 ( create table t1 (
c char(10) character set utf8 collate utf8_bin, c char(10) character set utf8 collate utf8_bin,
unique key a using hash (c(1))
) engine=heap;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` char(10) character set utf8 collate utf8_bin default NULL,
UNIQUE KEY `a` (`c`(1))
) ENGINE=HEAP DEFAULT CHARSET=latin1
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
insert into t1 values ('aa');
ERROR 23000: Duplicate entry 'aa' for key 1
insert into t1 values ('aaa');
ERROR 23000: Duplicate entry 'aaa' for key 1
insert into t1 values ('б');
insert into t1 values ('бб');
ERROR 23000: Duplicate entry 'б' for key 1
insert into t1 values ('ббб');
ERROR 23000: Duplicate entry 'б' for key 1
select c as c_all from t1 order by c;
c_all
a
b
c
d
e
f
б
select c as c_a from t1 where c='a';
c_a
a
select c as c_a from t1 where c='б';
c_a
б
drop table t1;
create table t1 (
c char(10) character set utf8 collate utf8_bin,
unique key a using btree (c(1)) unique key a using btree (c(1))
) engine=heap; ) engine=heap;
show create table t1; show create table t1;
......
...@@ -349,27 +349,25 @@ drop table t1; ...@@ -349,27 +349,25 @@ drop table t1;
# Bug 4531: unique key prefix interacts poorly with utf8 # Bug 4531: unique key prefix interacts poorly with utf8
# Check HEAP+HASH, binary collation # Check HEAP+HASH, binary collation
# #
# This doesn't work correctly yet. create table t1 (
# c char(10) character set utf8 collate utf8_bin,
#create table t1 ( unique key a using hash (c(1))
#c char(10) character set utf8 collate utf8_bin, ) engine=heap;
#unique key a using hash (c(1)) show create table t1;
#) engine=heap; insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
#show create table t1; --error 1062
#insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f'); insert into t1 values ('aa');
#--error 1062 --error 1062
#insert into t1 values ('aa'); insert into t1 values ('aaa');
#--error 1062 insert into t1 values ('б');
#insert into t1 values ('aaa'); --error 1062
#insert into t1 values ('б'); insert into t1 values ('бб');
#--error 1062 --error 1062
#insert into t1 values ('бб'); insert into t1 values ('ббб');
#--error 1062 select c as c_all from t1 order by c;
#insert into t1 values ('ббб'); select c as c_a from t1 where c='a';
#select c as c_all from t1 order by c; select c as c_a from t1 where c='б';
#select c as c_a from t1 where c='a'; drop table t1;
#select c as c_a from t1 where c='б';
#drop table t1;
# #
# Bug 4531: unique key prefix interacts poorly with utf8 # Bug 4531: unique key prefix interacts poorly with utf8
......
...@@ -430,7 +430,7 @@ int ha_heap::create(const char *name, TABLE *table_arg, ...@@ -430,7 +430,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
{ {
if (!f_is_packed(flag) && if (!f_is_packed(flag) &&
f_packtype(flag) == (int) FIELD_TYPE_DECIMAL && f_packtype(flag) == (int) FIELD_TYPE_DECIMAL &&
!(flag & FIELDFLAG_BINARY)) !(field->charset() == &my_charset_bin))
seg->type= (int) HA_KEYTYPE_TEXT; seg->type= (int) HA_KEYTYPE_TEXT;
else else
seg->type= (int) HA_KEYTYPE_BINARY; seg->type= (int) HA_KEYTYPE_BINARY;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment