CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_german2_ci);
INSERT INTO t1 VALUES ('Ü');
INSERT INTO t1 VALUES ('ue');
SELECT DISTINCT s1 FROM t1;

The above returned two rows in error.
Now it returns one row, in latin1_german2_ci:  Ü == ue
This commit is contained in:
unknown 2003-08-05 11:03:05 +05:00
parent 691b7584fb
commit fc8b138544
4 changed files with 34 additions and 5 deletions

View file

@ -371,8 +371,9 @@ int hp_rec_key_cmp(HP_KEYDEF *keydef, const byte *rec1, const byte *rec2)
}
if (seg->type == HA_KEYTYPE_TEXT)
{
if (my_strnncoll(seg->charset,(uchar*) rec1+seg->start,seg->length,
(uchar*) rec2+seg->start,seg->length))
if (seg->charset->coll->strnncollsp(seg->charset,
(uchar*) rec1+seg->start,seg->length,
(uchar*) rec2+seg->start,seg->length))
return 1;
}
else
@ -404,8 +405,9 @@ int hp_key_cmp(HP_KEYDEF *keydef, const byte *rec, const byte *key)
}
if (seg->type == HA_KEYTYPE_TEXT)
{
if (my_strnncoll(seg->charset,(uchar*) rec+seg->start, seg->length,
(uchar*) key, seg->length))
if (seg->charset->coll->strnncollsp(seg->charset,
(uchar*) rec+seg->start, seg->length,
(uchar*) key, seg->length))
return 1;
}
else

View file

@ -264,3 +264,18 @@ select * from t1 where word like CAST(0xDF as CHAR);
word word2
ß ß
drop table t1;
CREATE TABLE t1 (
s1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_german2_ci
);
INSERT INTO t1 VALUES ('Ü');
INSERT INTO t1 VALUES ('ue');
SELECT DISTINCT s1 FROM t1;
s1
Ü
SELECT s1,COUNT(*) FROM t1 GROUP BY s1;
s1 COUNT(*)
Ü 2
SELECT COUNT(DISTINCT s1) FROM t1;
COUNT(DISTINCT s1)
1
DROP TABLE t1;

View file

@ -73,3 +73,13 @@ select * from t1 where word like 'AE';
select * from t1 where word like binary 0xDF;
select * from t1 where word like CAST(0xDF as CHAR);
drop table t1;
CREATE TABLE t1 (
s1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_german2_ci
);
INSERT INTO t1 VALUES ('Ü');
INSERT INTO t1 VALUES ('ue');
SELECT DISTINCT s1 FROM t1;
SELECT s1,COUNT(*) FROM t1 GROUP BY s1;
SELECT COUNT(DISTINCT s1) FROM t1;
DROP TABLE t1;

View file

@ -1023,7 +1023,9 @@ int simple_str_key_cmp(void* arg, byte* key1, byte* key2)
Item_sum_count_distinct* item = (Item_sum_count_distinct*)arg;
CHARSET_INFO *cs=item->key_charset;
uint len=item->key_length;
return my_strnncoll(cs, (const uchar*) key1, len, (const uchar*) key2, len);
return cs->coll->strnncollsp(cs,
(const uchar*) key1, len,
(const uchar*) key2, len);
}
/*