1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

MCOL-4726 Wrong result of WHERE char1_col='A'

This commit is contained in:
Alexander Barkov
2021-05-21 14:34:55 +04:00
parent 6448742225
commit 284fc51bb7
53 changed files with 2695 additions and 27 deletions

View File

@ -32,17 +32,17 @@ public:
TCharShort(int64_t value)
:mValue(value)
{ }
explicit operator utils::ConstString() const
utils::ConstString toConstString(uint32_t width) const
{
utils::ConstString res = utils::ConstString((const char *) &mValue, 8);
utils::ConstString res = utils::ConstString((const char *) &mValue, width);
return res.rtrimZero();
}
static int strnncollsp(const datatypes::Charset &cs, int64_t a, int64_t b)
static int strnncollsp(const datatypes::Charset &cs, int64_t a, int64_t b, uint32_t width)
{
datatypes::TCharShort sa(a);
datatypes::TCharShort sb(b);
return cs.strnncollsp(static_cast<utils::ConstString>(sa),
static_cast<utils::ConstString>(sb));
return cs.strnncollsp(sa.toConstString(width),
sb.toConstString(width));
}
};

View File

@ -393,11 +393,11 @@ void LBIDList::UpdateMinMax(T min, T max, int64_t lbid,
if (datatypes::isCharType(type.colDataType))
{
datatypes::Charset cs(const_cast<CalpontSystemCatalog::ColType &>(type).getCharset());
if (datatypes::TCharShort::strnncollsp(cs, min, mmp->min) < 0 ||
if (datatypes::TCharShort::strnncollsp(cs, min, mmp->min, type.colWidth) < 0 ||
mmp->min == numeric_limits<int64_t>::max())
mmp->min = min;
if (datatypes::TCharShort::strnncollsp(cs, max, mmp->max) > 0 ||
if (datatypes::TCharShort::strnncollsp(cs, max, mmp->max, type.colWidth) > 0 ||
mmp->max == numeric_limits<int64_t>::min())
mmp->max = max;
}
@ -700,8 +700,8 @@ bool LBIDList::checkSingleValue(T min, T max, T value,
// MCOL-641 LBIDList::CasualPartitionDataType() returns false if
// width > 8 for a character type, so T cannot be int128_t here
datatypes::Charset cs(const_cast<execplan::CalpontSystemCatalog::ColType&>(type).getCharset());
return datatypes::TCharShort::strnncollsp(cs, value, min) >= 0 &&
datatypes::TCharShort::strnncollsp(cs, value, max) <= 0;
return datatypes::TCharShort::strnncollsp(cs, value, min, type.colWidth) >= 0 &&
datatypes::TCharShort::strnncollsp(cs, value, max, type.colWidth) <= 0;
}
else if (isUnsigned(type.colDataType))
{
@ -723,8 +723,8 @@ bool LBIDList::checkRangeOverlap(T min, T max, T tmin, T tmax,
// MCOL-641 LBIDList::CasualPartitionDataType() returns false if
// width > 8 for a character type, so T cannot be int128_t here
datatypes::Charset cs(const_cast<execplan::CalpontSystemCatalog::ColType&>(type).getCharset());
return datatypes::TCharShort::strnncollsp(cs, tmin, max) <= 0 &&
datatypes::TCharShort::strnncollsp(cs, tmax, min) >= 0;
return datatypes::TCharShort::strnncollsp(cs, tmin, max, type.colWidth) <= 0 &&
datatypes::TCharShort::strnncollsp(cs, tmax, min, type.colWidth) >= 0;
}
else if (isUnsigned(type.colDataType))
{
@ -852,12 +852,12 @@ bool LBIDList::CasualPartitionPredicate(const BRM::EMCasualPartition_t& cpRange,
continue;
}
if (bIsChar && 1 < ct.colWidth)
if (bIsChar)
{
datatypes::Charset cs(ct.charsetNumber);
utils::ConstString sMin((const char *) &cpRange.loVal, 8);
utils::ConstString sMax((const char *) &cpRange.hiVal, 8);
utils::ConstString sVal((const char *) &value, 8);
utils::ConstString sMin((const char *) &cpRange.loVal, ct.colWidth);
utils::ConstString sMax((const char *) &cpRange.hiVal, ct.colWidth);
utils::ConstString sVal((const char *) &value, ct.colWidth);
scan = compareStr(cs, sMin.rtrimZero(),
sMax.rtrimZero(),
sVal.rtrimZero(), op, lcf);

View File

@ -1,4 +1,728 @@
SELECT @mysqltest_file;
@mysqltest_file
ctype_cmp_char1_latin1_swedish_ci
SET @database=CONCAT('mcs_', @mysqltest_file);
EXECUTE IMMEDIATE CONCAT('DROP DATABASE IF EXISTS ', @database);
EXECUTE IMMEDIATE CONCAT('CREATE DATABASE ', @database);
CREATE PROCEDURE exec(query TEXT)
BEGIN
SELECT query AS '';
EXECUTE IMMEDIATE query;
END;
$$
CREATE PROCEDURE test01_execval(op VARCHAR(3) CHARACTER SET utf8,
val VARCHAR(64) CHARACTER SET utf8)
BEGIN
DECLARE query TEXT DEFAULT 'SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1=''VAL''';
SET query=REPLACE(query,'=',op);
SET query=REPLACE(query,'VAL', val);
CALL exec(query);
END;
$$
CREATE PROCEDURE test01_populate(len1 INT, len2 INT)
BEGIN
-- Make sure the table is handled by a proper ENGINE
SELECT (SELECT engine FROM information_schema.tables WHERE (table_schema,table_name)=(@database,'t1')) =
@@default_storage_engine;
FOR i IN len1..len2
DO
INSERT INTO t1 VALUES (RPAD('a',i)),(RPAD('A',i));
-- LATIN SMALL LETTER A WITH TILDE
-- LATIN CAPITAL LETTER A WITH TILDE
INSERT INTO t1 VALUES (RPAD(_latin1 0xE3,i)),(RPAD(_latin1 0xC3,i));
INSERT INTO t1 VALUES (RPAD('b',i)),(RPAD('B',i));
END FOR;
-- MCOL-4454 "ORDER BY BINARY a" is not like in InnoDB
CALL exec('SELECT QUOTE(c1) FROM t1 ORDER BY c1, BINARY(c1) ASC');
CALL exec('SELECT QUOTE(c1) FROM t1 ORDER BY c1, BINARY(c1) DESC');
END;
$$
CREATE PROCEDURE test01_field_literal_op(len1 INT,
len2 INT,
op VARCHAR(3) CHARACTER SET utf8)
BEGIN
FOR i IN len1..len2
DO
CALL test01_execval(op,RPAD('a',i));
CALL test01_execval(op,RPAD('A',i));
CALL test01_execval(op,RPAD(_latin1 0xE3,i)); -- LATIN SMALL LETTER A WITH TILDE
CALL test01_execval(op,RPAD(_latin1 0xC3,i)); -- LATIN CAPITAL LETTER A WITH TILDE
END FOR;
END;
$$
CREATE PROCEDURE test01_field_literal(len1 INT,
len2 INT)
BEGIN
CALL test01_field_literal_op(len1, len2, '=');
CALL test01_field_literal_op(len1, len2, '<=');
CALL test01_field_literal_op(len1, len2, '<');
CALL test01_field_literal_op(len1, len2, '>');
CALL test01_field_literal_op(len1, len2, '>=');
CALL test01_field_literal_op(len1, len2, '<>');
END;
$$
CREATE PROCEDURE test01_field_field()
BEGIN
SELECT QUOTE(t1.c1), QUOTE(t2.c1) FROM t1, t1 t2 WHERE t1.c1=t2.c1 ORDER BY HEX(t1.c1), HEX(t2.c1);
END;
$$
CREATE PROCEDURE test01_distinct()
BEGIN
DECLARE vrecno INT DEFAULT 1;
CALL exec('SELECT GROUP_CONCAT(CONCAT(''['',c1,'']'') ORDER BY BINARY(c1) SEPARATOR '''') FROM t1 GROUP BY c1 ORDER BY c1');
CALL exec('SELECT COUNT(DISTINCT c1) FROM t1');
CREATE TABLE t2 AS SELECT DISTINCT c1 FROM t1;
CALL exec('SELECT COUNT(*) FROM t2');
CREATE TABLE t3 AS SELECT t1.c1, CAST(0 AS UNSIGNED) AS distinct_count FROM t1 LIMIT 0;
FOR rec IN (SELECT c1 FROM t1)
DO
INSERT INTO t3 SELECT rec.c1, COUNT(*) FROM t2 WHERE t2.c1=rec.c1;
END FOR;
CALL exec('SELECT distinct_count, QUOTE(c1) FROM t3 ORDER BY c1, BINARY(c1)');
DROP TABLE t3;
CREATE TABLE t4 AS SELECT t1.c1, CAST(0 AS UNSIGNED) AS distinct_recno FROM t1 LIMIT 0;
FOR rec IN (SELECT c1 FROM t2 ORDER BY c1)
DO
INSERT INTO t4 SELECT t1.c1, vrecno FROM t1 WHERE t1.c1=rec.c1 ORDER BY BINARY t1.c1;
SET vrecno= vrecno+1;
END FOR;
CALL exec('SELECT distinct_recno, QUOTE(c1) FROM t4 ORDER BY c1, BINARY(c1)');
DROP TABLE t4;
DROP TABLE t2;
END;
$$
CREATE PROCEDURE test02_same_table_create_table(dtype VARCHAR(128))
BEGIN
DECLARE tbl TEXT DEFAULT 'CREATE TABLE t1 (c1 TYPE, c2 TYPE)';
SET tbl=REPLACE(tbl,'TYPE',dtype);
CALL exec(tbl);
END;
$$
CREATE PROCEDURE test02_same_table_populate()
BEGIN
INSERT INTO t1 VALUES ('a', 'A');
INSERT INTO t1 VALUES ('a', 'A ');
INSERT INTO t1 VALUES ('a ', 'A');
INSERT INTO t1 VALUES ('a ', 'A ');
END;
$$
CREATE PROCEDURE test02_same_table_cmp_field_field_op(op VARCHAR(2))
BEGIN
DECLARE query TEXT DEFAULT 'SELECT QUOTE(c1), QUOTE(c2) FROM t1 '
'WHERE c1=c2 ORDER BY HEX(c1), HEX(c2)';
SET query=REPLACE(query,'=',op);
CALL exec(query);
END;
$$
CREATE PROCEDURE test02_same_table_cmp_field_field()
BEGIN
CALL test02_same_table_cmp_field_field_op('=');
CALL test02_same_table_cmp_field_field_op('<=');
CALL test02_same_table_cmp_field_field_op('<');
CALL test02_same_table_cmp_field_field_op('>');
CALL test02_same_table_cmp_field_field_op('>=');
CALL test02_same_table_cmp_field_field_op('<>');
END;
$$
CREATE PROCEDURE test03(len INT, datatype TEXT)
BEGIN
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE, c2 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE('INSERT INTO t1 VALUES (LEFT(''Hellooooooooooooooooooo'',LEN),LEFT(''hellooooooooooooooooooo'',LEN))', 'LEN', len));
CALL exec(REPLACE('CREATE TABLE t2 (c1 DATATYPE, c2 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE('INSERT INTO t2 VALUES (LEFT(''Hellooooooooooooooooooo'',LEN),LEFT(''hellooooooooooooooooooo'',LEN))', 'LEN', len));
CALL exec(REPLACE('SELECT * FROM t1 WHERE c1=''VAL''', 'VAL', LEFT('Hellooooooooooooooooooo', len)));
CALL exec(REPLACE('SELECT * FROM t1 WHERE c1=''VAL''', 'VAL', LEFT('hellooooooooooooooooooo', len)));
CALL exec('SELECT * FROM t1 WHERE c1=c2');
CALL exec('SELECT * FROM t1, t2 WHERE t1.c1=t2.c1');
CALL exec('SELECT * FROM t1, t2 WHERE t1.c1=t2.c2');
CALL exec('SELECT * FROM t1, t2 WHERE t1.c2=t2.c1');
CALL exec('SELECT * FROM t1, t2 WHERE t1.c2=t2.c2');
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test04_like(len INT, datatype TEXT)
BEGIN
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE('INSERT INTO t1 VALUES (REPEAT(''a'',LEN))','LEN',len));
CALL exec(REPLACE('INSERT INTO t1 VALUES (REPEAT(''A'',LEN))','LEN',len));
CALL exec('SELECT * FROM t1 WHERE c1 LIKE ''a%'' ORDER BY BINARY c1');
CALL exec('SELECT * FROM t1 WHERE c1 LIKE ''A%'' ORDER BY BINARY c1');
CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','VAL',REPEAT('a',len)));
CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','VAL',REPEAT('A',len)));
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci';
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci);
CALL test01_populate(1,1);
(SELECT engine FROM information_schema.tables WHERE (table_schema,table_name)=(@database,'t1')) =
@@default_storage_engine
1
SELECT QUOTE(c1) FROM t1 ORDER BY c1, BINARY(c1) ASC
QUOTE(c1)
'A'
'a'
'Ã'
'ã'
'B'
'b'
SELECT QUOTE(c1) FROM t1 ORDER BY c1, BINARY(c1) DESC
QUOTE(c1)
'ã'
'Ã'
'a'
'A'
'b'
'B'
CALL test01_field_literal(1,2);
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='a'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='A'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='ã'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='Ã'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='a '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='A '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='ã '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1='Ã '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='a'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='A'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='ã'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='Ã'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='a '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='A '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='ã '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<='Ã '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'a'
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'A'
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'ã'
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'Ã'
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'a '
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'A '
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'ã '
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<'Ã '
HEX(c1) QUOTE(c1)
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'a'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'A'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'ã'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'Ã'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'a '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'A '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'ã '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>'Ã '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='a'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='A'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='ã'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='Ã'
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='a '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='A '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='ã '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1>='Ã '
HEX(c1) QUOTE(c1)
61 'a'
41 'A'
E3 'ã'
C3 'Ã'
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'a'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'A'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'ã'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'Ã'
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'a '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'A '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'ã '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
SELECT HEX(c1), QUOTE(c1) FROM t1 WHERE c1<>'Ã '
HEX(c1) QUOTE(c1)
62 'b'
42 'B'
CALL test01_field_field();
QUOTE(t1.c1) QUOTE(t2.c1)
'A' 'A'
'A' 'a'
'A' 'Ã'
'A' 'ã'
'B' 'B'
'B' 'b'
'a' 'A'
'a' 'a'
'a' 'Ã'
'a' 'ã'
'b' 'B'
'b' 'b'
'Ã' 'A'
'Ã' 'a'
'Ã' 'Ã'
'Ã' 'ã'
'ã' 'A'
'ã' 'a'
'ã' 'Ã'
'ã' 'ã'
CALL test01_distinct();
SELECT GROUP_CONCAT(CONCAT('[',c1,']') ORDER BY BINARY(c1) SEPARATOR '') FROM t1 GROUP BY c1 ORDER BY c1
GROUP_CONCAT(CONCAT('[',c1,']') ORDER BY BINARY(c1) SEPARATOR '')
[A][a][Ã][ã]
[B][b]
SELECT COUNT(DISTINCT c1) FROM t1
COUNT(DISTINCT c1)
2
SELECT COUNT(*) FROM t2
COUNT(*)
2
SELECT distinct_count, QUOTE(c1) FROM t3 ORDER BY c1, BINARY(c1)
distinct_count QUOTE(c1)
1 'A'
1 'a'
1 'Ã'
1 'ã'
1 'B'
1 'b'
SELECT distinct_recno, QUOTE(c1) FROM t4 ORDER BY c1, BINARY(c1)
distinct_recno QUOTE(c1)
1 'A'
1 'a'
1 'Ã'
1 'ã'
2 'B'
2 'b'
DROP TABLE t1;
CALL test02_same_table_create_table(@datatype);
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci, c2 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
CALL test02_same_table_populate();
CALL test02_same_table_cmp_field_field();
SELECT QUOTE(c1), QUOTE(c2) FROM t1 WHERE c1=c2 ORDER BY HEX(c1), HEX(c2)
QUOTE(c1) QUOTE(c2)
'a' 'A'
'a' 'A'
'a' 'A'
'a' 'A'
SELECT QUOTE(c1), QUOTE(c2) FROM t1 WHERE c1<=c2 ORDER BY HEX(c1), HEX(c2)
QUOTE(c1) QUOTE(c2)
'a' 'A'
'a' 'A'
'a' 'A'
'a' 'A'
SELECT QUOTE(c1), QUOTE(c2) FROM t1 WHERE c1<c2 ORDER BY HEX(c1), HEX(c2)
QUOTE(c1) QUOTE(c2)
SELECT QUOTE(c1), QUOTE(c2) FROM t1 WHERE c1>c2 ORDER BY HEX(c1), HEX(c2)
QUOTE(c1) QUOTE(c2)
SELECT QUOTE(c1), QUOTE(c2) FROM t1 WHERE c1>=c2 ORDER BY HEX(c1), HEX(c2)
QUOTE(c1) QUOTE(c2)
'a' 'A'
'a' 'A'
'a' 'A'
'a' 'A'
SELECT QUOTE(c1), QUOTE(c2) FROM t1 WHERE c1<>c2 ORDER BY HEX(c1), HEX(c2)
QUOTE(c1) QUOTE(c2)
DROP TABLE t1;
CALL test03(1, @datatype);
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci, c2 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES (LEFT('Hellooooooooooooooooooo',1),LEFT('hellooooooooooooooooooo',1))
CREATE TABLE t2 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci, c2 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t2 VALUES (LEFT('Hellooooooooooooooooooo',1),LEFT('hellooooooooooooooooooo',1))
SELECT * FROM t1 WHERE c1='H'
c1 c2
H h
SELECT * FROM t1 WHERE c1='h'
c1 c2
H h
SELECT * FROM t1 WHERE c1=c2
c1 c2
H h
SELECT * FROM t1, t2 WHERE t1.c1=t2.c1
c1 c2 c1 c2
H h H h
SELECT * FROM t1, t2 WHERE t1.c1=t2.c2
c1 c2 c1 c2
H h H h
SELECT * FROM t1, t2 WHERE t1.c2=t2.c1
c1 c2 c1 c2
H h H h
SELECT * FROM t1, t2 WHERE t1.c2=t2.c2
c1 c2 c1 c2
H h H h
DROP TABLE t1
CALL test04_like(1, @datatype);
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES (REPEAT('a',1))
INSERT INTO t1 VALUES (REPEAT('A',1))
SELECT * FROM t1 WHERE c1 LIKE 'a%' ORDER BY BINARY c1
c1
A
a
SELECT * FROM t1 WHERE c1 LIKE 'A%' ORDER BY BINARY c1
c1
A
a
SELECT * FROM t1 WHERE c1 LIKE 'a%' ORDER BY BINARY c1
c1
A
a
SELECT * FROM t1 WHERE c1 LIKE 'A%' ORDER BY BINARY c1
c1
A
a
DROP TABLE t1
CALL test05_mcol4726(1, @datatype);
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES('a')
INSERT INTO t1 VALUES('A')
INSERT INTO t1 VALUES('ã')
INSERT INTO t1 VALUES('Ã')
INSERT INTO t1 VALUES('ä')
INSERT INTO t1 VALUES('Ä')
SELECT c1 FROM t1 WHERE c1='a' ORDER BY BINARY c1
c1
A
a
Ã
ã
SELECT c1 FROM t1 WHERE c1='A' ORDER BY BINARY c1
c1
A
a
Ã
ã
SELECT c1 FROM t1 WHERE c1='ã' ORDER BY BINARY c1
c1
A
a
Ã
ã
SELECT c1 FROM t1 WHERE c1='Ã' ORDER BY BINARY c1
c1
A
a
Ã
ã
SELECT c1 FROM t1 WHERE c1='ä' ORDER BY BINARY c1
c1
Ä
ä
SELECT c1 FROM t1 WHERE c1='Ä' ORDER BY BINARY c1
c1
Ä
ä
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
DROP PROCEDURE test01_populate;
DROP PROCEDURE test01_field_literal_op;
DROP PROCEDURE test01_field_literal;
DROP PROCEDURE test01_field_field;
DROP PROCEDURE test01_distinct;
DROP PROCEDURE test02_same_table_create_table;
DROP PROCEDURE test02_same_table_populate;
DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;
#
# MCOL-4721 CHAR(1) is not collation-aware for GROUP/DISTINCT
#
@ -20,3 +744,13 @@ c1
a
ä
DROP TABLE t1;
#
# MCOL-4726 Wrong result of WHERE char1_col='A'
#
CREATE TABLE t1 (a CHAR(1) CHARACTER SET latin1);
INSERT INTO t1 VALUES ('a'),('Ã');
SELECT * FROM t1 WHERE a='A';
a
a
Ã
DROP TABLE t1;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci';
CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci);
@ -1696,6 +1722,61 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ÄÄÄÄ
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1791,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='CHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci';
CREATE TABLE t1 (c1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci);
@ -1984,6 +2010,61 @@ c1
AAAAA
aaaaa
DROP TABLE t1
CALL test05_mcol4726(5, @datatype);
CREATE TABLE t1 (c1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES('aaaaa')
INSERT INTO t1 VALUES('AAAAA')
INSERT INTO t1 VALUES('ããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃ')
INSERT INTO t1 VALUES('äääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaa' ORDER BY BINARY c1
c1
AAAAA
aaaaa
ÃÃÃÃÃ
ããããã
SELECT c1 FROM t1 WHERE c1='AAAAA' ORDER BY BINARY c1
c1
AAAAA
aaaaa
ÃÃÃÃÃ
ããããã
SELECT c1 FROM t1 WHERE c1='ããããã' ORDER BY BINARY c1
c1
AAAAA
aaaaa
ÃÃÃÃÃ
ããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAA
aaaaa
ÃÃÃÃÃ
ããããã
SELECT c1 FROM t1 WHERE c1='äääää' ORDER BY BINARY c1
c1
ÄÄÄÄÄ
äääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄ
äääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1998,6 +2079,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin);
@ -1566,6 +1592,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%' ORDER BY BINA
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1580,6 +1647,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_nopad_bin';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_nopad_bin);
@ -1542,6 +1568,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%' ORDER BY BINA
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_nopad_bin)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1556,6 +1623,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci);
@ -1696,6 +1722,61 @@ c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ääääääääääääääääääääääääääääääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1791,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci);
@ -1580,6 +1606,61 @@ c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ääääääääääääääääääääääääääääääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1594,6 +1675,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin);
@ -1566,6 +1592,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%' ORDER BY BINA
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1580,6 +1647,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci);
@ -1696,6 +1722,77 @@ c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1807,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci);
@ -1292,6 +1318,77 @@ c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1306,6 +1403,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_nopad_bin';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_nopad_bin);
@ -1542,6 +1568,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%' ORDER BY BINA
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_nopad_bin)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
ãããããããããããããããããããããããããããããããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1556,6 +1623,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci);
@ -1696,6 +1722,77 @@ c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1807,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci';
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci);
@ -1292,6 +1318,77 @@ c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP TABLE t1
CALL test05_mcol4726(32, @datatype);
CREATE TABLE t1 (c1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci)
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
INSERT INTO t1 VALUES('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
INSERT INTO t1 VALUES('ãããããããããããããããããããããããããããããããã')
INSERT INTO t1 VALUES('ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ')
INSERT INTO t1 VALUES('ääääääääääääääääääääääääääääääää')
INSERT INTO t1 VALUES('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ãããããããããããããããããããããããããããããããã' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ääääääääääääääääääääääääääääääää' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' ORDER BY BINARY c1
c1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ãããããããããããããããããããããããããããããããã
ääääääääääääääääääääääääääääääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1306,6 +1403,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_bin';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_bin);
@ -1566,6 +1592,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAA%' ORDER BY BINARY c1
c1
AAAA
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_bin)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
aaaa
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1580,6 +1647,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_nopad_bin';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_nopad_bin);
@ -1542,6 +1568,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAA%' ORDER BY BINARY c1
c1
AAAA
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_nopad_bin)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
aaaa
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1556,6 +1623,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci);
@ -1696,6 +1722,61 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ÄÄÄÄ
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1791,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci);
@ -1580,6 +1606,61 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ãããã
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ÄÄÄÄ
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1594,6 +1675,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_bin';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_bin);
@ -1566,6 +1592,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAA%' ORDER BY BINARY c1
c1
AAAA
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_bin)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
aaaa
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1580,6 +1647,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_ci';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_ci);
@ -1696,6 +1722,77 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1807,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci);
@ -1292,6 +1318,77 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1306,6 +1403,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_nopad_bin';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_nopad_bin);
@ -1542,6 +1568,47 @@ SELECT * FROM t1 WHERE c1 LIKE 'AAAA%' ORDER BY BINARY c1
c1
AAAA
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_nopad_bin)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
aaaa
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
ãããã
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
ÃÃÃÃ
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
ÄÄÄÄ
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1556,6 +1623,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_ci);
@ -1696,6 +1722,77 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1710,6 +1807,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -152,6 +152,32 @@ CALL exec(REPLACE('SELECT * FROM t1 WHERE c1 LIKE ''VAL%'' ORDER BY BINARY c1','
CALL exec('DROP TABLE t1');
END;
$$
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
SET NAMES utf8;
SET @datatype='VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci';
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci);
@ -1292,6 +1318,77 @@ c1
AAAA
aaaa
DROP TABLE t1
CALL test05_mcol4726(4, @datatype);
CREATE TABLE t1 (c1 VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci)
INSERT INTO t1 VALUES('aaaa')
INSERT INTO t1 VALUES('AAAA')
INSERT INTO t1 VALUES('ãããã')
INSERT INTO t1 VALUES('ÃÃÃÃ')
INSERT INTO t1 VALUES('ääää')
INSERT INTO t1 VALUES('ÄÄÄÄ')
SELECT c1 FROM t1 WHERE c1='aaaa' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='AAAA' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ãããã' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÃÃÃÃ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ääää' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
SELECT c1 FROM t1 WHERE c1='ÄÄÄÄ' ORDER BY BINARY c1
c1
AAAA
aaaa
ÃÃÃÃ
ÄÄÄÄ
ãããã
ääää
DROP TABLE t1
DROP PROCEDURE exec;
DROP PROCEDURE test01_execval;
@ -1306,6 +1403,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -1,8 +1,34 @@
--source ../include/have_columnstore.inc
--source ctype_cmp_combinations.inc
--source ctype_cmp_create.inc
SET NAMES utf8;
SET @datatype='CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci';
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci);
CALL test01_populate(1,1);
CALL test01_field_literal(1,2);
CALL test01_field_field();
CALL test01_distinct();
DROP TABLE t1;
CALL test02_same_table_create_table(@datatype);
CALL test02_same_table_populate();
CALL test02_same_table_cmp_field_field();
DROP TABLE t1;
CALL test03(1, @datatype);
CALL test04_like(1, @datatype);
CALL test05_mcol4726(1, @datatype);
--source ctype_cmp_drop.inc
--echo #
--echo # MCOL-4721 CHAR(1) is not collation-aware for GROUP/DISTINCT
--echo #
@ -15,3 +41,12 @@ INSERT INTO t1 VALUES ('ä'),('Ä'),('ã'),('Ã');
SELECT c1, COUNT(*) FROM t1 GROUP BY c1 ORDER BY c1;
SELECT DISTINCT c1 FROM t1 ORDER BY c1;
DROP TABLE t1;
--echo #
--echo # MCOL-4726 Wrong result of WHERE char1_col='A'
--echo #
CREATE TABLE t1 (a CHAR(1) CHARACTER SET latin1);
INSERT INTO t1 VALUES ('a'),('Ã');
SELECT * FROM t1 WHERE a='A';
DROP TABLE t1;

View File

@ -23,4 +23,6 @@ CALL test03(4, @datatype);
CALL test04_like(4, @datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(5, @datatype);
CALL test04_like(5, @datatype);
CALL test05_mcol4726(5, @datatype);
--source ctype_cmp_drop.inc

View File

@ -227,3 +227,37 @@ BEGIN
END;
$$
DELIMITER ;$$
DELIMITER $$;
CREATE PROCEDURE test05_mcol4726(len INT, datatype TEXT)
BEGIN
DECLARE small_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('a',len);
DECLARE cap_a VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT('A',len);
DECLARE small_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE3,len);
DECLARE cap_a_with_tilde VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC3,len);
DECLARE small_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xE4,len);
DECLARE cap_a_with_diaeresis VARCHAR(64) CHARACTER SET utf8 DEFAULT REPEAT(_latin1 0xC4,len);
DECLARE ins VARCHAR(64) CHARACTER SET utf8 DEFAULT 'INSERT INTO t1 VALUES(IVAL)';
DECLARE sel VARCHAR(64) CHARACTER SET utf8 DEFAULT 'SELECT c1 FROM t1 WHERE c1=IVAL ORDER BY BINARY c1';
CALL exec(REPLACE('CREATE TABLE t1 (c1 DATATYPE)', 'DATATYPE', datatype));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(ins, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_tilde, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', small_a_with_diaeresis, '''')));
CALL exec(REPLACE(sel, 'IVAL', CONCAT('''', cap_a_with_diaeresis, '''')));
CALL exec('DROP TABLE t1');
END;
$$
DELIMITER ;$$

View File

@ -11,6 +11,7 @@ DROP PROCEDURE test02_same_table_cmp_field_field_op;
DROP PROCEDURE test02_same_table_cmp_field_field;
DROP PROCEDURE test03;
DROP PROCEDURE test04_like;
DROP PROCEDURE test05_mcol4726;
EXECUTE IMMEDIATE CONCAT('DROP DATABASE ', @database);
USE test;
SET @@default_storage_engine=DEFAULT;

View File

@ -24,4 +24,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -22,4 +22,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -22,4 +22,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -22,4 +22,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(32,@datatype);
CALL test04_like(32,@datatype);
CALL test05_mcol4726(32, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -22,4 +22,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -22,4 +22,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -22,4 +22,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -23,4 +23,6 @@ CALL test03(4,@datatype);
CALL test04_like(4,@datatype);
CALL test05_mcol4726(4, @datatype);
--source ctype_cmp_drop.inc

View File

@ -604,8 +604,8 @@ inline bool colCompare(int64_t val1, int64_t val2, uint8_t COP, uint8_t rf,
if ((typeHolder.getCharset().state & (MY_CS_BINSORT|MY_CS_NOPAD)) ==
(MY_CS_BINSORT|MY_CS_NOPAD))
return colCompare_(order_swap(val1), order_swap(val2), COP);
utils::ConstString s1 = {reinterpret_cast<const char*>(&val1), 8};
utils::ConstString s2 = {reinterpret_cast<const char*>(&val2), 8};
utils::ConstString s1 = {reinterpret_cast<const char*>(&val1), width};
utils::ConstString s2 = {reinterpret_cast<const char*>(&val2), width};
return colCompareStr(typeHolder, COP, s1.rtrimZero(), s2.rtrimZero());
}
else
@ -1303,10 +1303,10 @@ inline void p_Col_ridArray(NewColRequestHeader* in,
if (out->ValidMinMax && !isNull && !isEmpty)
{
if ((in->colType.DataType == CalpontSystemCatalog::CHAR ||
if (in->colType.DataType == CalpontSystemCatalog::CHAR ||
in->colType.DataType == CalpontSystemCatalog::VARCHAR ||
in->colType.DataType == CalpontSystemCatalog::BLOB ||
in->colType.DataType == CalpontSystemCatalog::TEXT ) && 1 < W)
in->colType.DataType == CalpontSystemCatalog::TEXT )
{
if (colCompare(out->Min, val, COMPARE_GT, false, in->colType, W))
out->Min = val;

View File

@ -620,8 +620,8 @@ bool StrFilterCmd::compare_cc(uint64_t i, uint64_t j)
datatypes::Charset cs(leftColType.getCharset());
datatypes::TCharShort s0(bpp->fFiltCmdValues[0][i]);
datatypes::TCharShort s1(bpp->fFiltCmdValues[1][j]);
return compareString(cs, static_cast<utils::ConstString>(s0),
static_cast<utils::ConstString>(s1), fBOP);
return compareString(cs, s0.toConstString(leftColType.colWidth),
s1.toConstString(rightColType.colWidth), fBOP);
}
@ -647,7 +647,7 @@ bool StrFilterCmd::compare_cs(uint64_t i, uint64_t j)
datatypes::Charset cs(leftColType.getCharset());
datatypes::TCharShort s0(bpp->fFiltCmdValues[0][i]);
utils::ConstString s1(bpp->fFiltStrValues[1][j]);
return compareString(cs, static_cast<utils::ConstString>(s0), s1, fBOP);
return compareString(cs, s0.toConstString(leftColType.colWidth), s1, fBOP);
}
@ -660,7 +660,7 @@ bool StrFilterCmd::compare_sc(uint64_t i, uint64_t j)
datatypes::Charset cs(leftColType.getCharset());
utils::ConstString s0(bpp->fFiltStrValues[0][i]);
datatypes::TCharShort s1(bpp->fFiltCmdValues[1][j]);
return compareString(cs, s0, static_cast<utils::ConstString>(s1), fBOP);
return compareString(cs, s0, s1.toConstString(rightColType.colWidth), fBOP);
}

View File

@ -1131,13 +1131,13 @@ void TupleJoiner::updateCPData(const Row& r)
datatypes::Charset cs(r.getCharset(colIdx));
int64_t val = r.getIntField(colIdx);
if (datatypes::TCharShort::strnncollsp(cs, val, min) < 0 ||
if (datatypes::TCharShort::strnncollsp(cs, val, min, r.getColumnWidth(smallKeyColumns[col])) < 0 ||
((int64_t) min) == numeric_limits<int64_t>::max())
{
min = val;
}
if (datatypes::TCharShort::strnncollsp(cs, val, max) > 0 ||
if (datatypes::TCharShort::strnncollsp(cs, val, max, r.getColumnWidth(smallKeyColumns[col])) > 0 ||
((int64_t) max) == numeric_limits<int64_t>::min())
{
max = val;