Bug #7878 with utf_general_ci, equals (=) has problem with accent insensitivity
Backporting Monty's fix for 5.0 into 4.1.
This commit is contained in:
parent
5b91c5a73c
commit
cfa78c2645
@ -340,6 +340,7 @@ enum ha_base_keytype {
|
|||||||
#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
|
#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
|
||||||
#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
|
#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
|
||||||
#define HA_STATE_EXTEND_BLOCK 2048
|
#define HA_STATE_EXTEND_BLOCK 2048
|
||||||
|
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same was called */
|
||||||
|
|
||||||
enum en_fieldtype {
|
enum en_fieldtype {
|
||||||
FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE,
|
FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE,
|
||||||
|
@ -57,7 +57,11 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||||||
#endif
|
#endif
|
||||||
case HA_KEY_ALG_BTREE:
|
case HA_KEY_ALG_BTREE:
|
||||||
default:
|
default:
|
||||||
memcpy(info->lastkey2,info->lastkey,info->last_rkey_length);
|
if (!(info->update & HA_STATE_RNEXT_SAME))
|
||||||
|
{
|
||||||
|
/* First rnext_same; Store old key */
|
||||||
|
memcpy(info->lastkey2,info->lastkey,info->last_rkey_length);
|
||||||
|
}
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if ((error=_mi_search_next(info,keyinfo,info->lastkey,
|
if ((error=_mi_search_next(info,keyinfo,info->lastkey,
|
||||||
@ -81,7 +85,7 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||||||
rw_unlock(&info->s->key_root_lock[inx]);
|
rw_unlock(&info->s->key_root_lock[inx]);
|
||||||
/* Don't clear if database-changed */
|
/* Don't clear if database-changed */
|
||||||
info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
|
info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
|
||||||
info->update|= HA_STATE_NEXT_FOUND;
|
info->update|= HA_STATE_NEXT_FOUND | HA_STATE_RNEXT_SAME;
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
|
@ -326,3 +326,15 @@ latin1_german2_ci 6109
|
|||||||
latin1_german2_ci 61
|
latin1_german2_ci 61
|
||||||
latin1_german2_ci 6120
|
latin1_german2_ci 6120
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
col1 varchar(255) NOT NULL default ''
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 collate latin1_german2_ci;
|
||||||
|
INSERT INTO t1 VALUES ('ß'),('ss'),('ss');
|
||||||
|
ALTER TABLE t1 ADD KEY ifword(col1);
|
||||||
|
SELECT * FROM t1 WHERE col1='ß' ORDER BY col1, BINARY col1;
|
||||||
|
col1
|
||||||
|
ss
|
||||||
|
ss
|
||||||
|
ß
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -116,3 +116,19 @@ SELECT FIELD('ue',s1), FIELD('
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
-- source include/ctype_filesort.inc
|
-- source include/ctype_filesort.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#7878 with utf8_general_ci, equals (=) has problem with
|
||||||
|
# accent insensitivity.
|
||||||
|
# Although originally this problem was found with UTF8 character set,
|
||||||
|
# '=' behaved wrong for latin1_german2_ci as well.
|
||||||
|
# Let's check it does not work incorrect anymore.
|
||||||
|
#
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
col1 varchar(255) NOT NULL default ''
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 collate latin1_german2_ci;
|
||||||
|
INSERT INTO t1 VALUES ('ß'),('ss'),('ss');
|
||||||
|
ALTER TABLE t1 ADD KEY ifword(col1);
|
||||||
|
SELECT * FROM t1 WHERE col1='ß' ORDER BY col1, BINARY col1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user