mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Row comparison now does compare field collations, e.g.
ROW('a','b','c) = ROW('A' collate latin1_bin,'b','c') returns 0 When a number is compared to a string, character sets and collations are not aggregated. e.g. this returned error in 4.1.0: SELECT 1=_latin2'1'; because character sets was aggregated, and 1 was considered as a string of latin1 charset during this aggregation.
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
drop table if exists t1;
|
||||
set names latin1;
|
||||
select 'hello',"'hello'",'""hello""','''h''e''l''l''o''',"hel""lo",'hel\'lo';
|
||||
hello 'hello' ""hello"" 'h'e'l'l'o' hel"lo hel'lo
|
||||
hello 'hello' ""hello"" 'h'e'l'l'o' hel"lo hel'lo
|
||||
@ -249,6 +250,34 @@ INSERT INTO t1 VALUES (1, 'a545f661efdd1fb66fdee3aab79945bf');
|
||||
SELECT 1 FROM t1 WHERE tmp=AES_DECRYPT(tmp,"password");
|
||||
1
|
||||
DROP TABLE t1;
|
||||
select 1=_latin1'1';
|
||||
1=_latin1'1'
|
||||
1
|
||||
select _latin1'1'=1;
|
||||
_latin1'1'=1
|
||||
1
|
||||
select _latin2'1'=1;
|
||||
_latin2'1'=1
|
||||
1
|
||||
select 1=_latin2'1';
|
||||
1=_latin2'1'
|
||||
1
|
||||
select _latin1'1'=_latin2'1';
|
||||
ERROR HY000: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (latin2_general_ci,COERCIBLE) for operation '='
|
||||
select row('a','b','c') = row('a','b','c');
|
||||
row('a','b','c') = row('a','b','c')
|
||||
1
|
||||
select row('A','b','c') = row('a','b','c');
|
||||
row('A','b','c') = row('a','b','c')
|
||||
1
|
||||
select row('A' COLLATE latin1_bin,'b','c') = row('a','b','c');
|
||||
row('A' COLLATE latin1_bin,'b','c') = row('a','b','c')
|
||||
0
|
||||
select row('A','b','c') = row('a' COLLATE latin1_bin,'b','c');
|
||||
row('A','b','c') = row('a' COLLATE latin1_bin,'b','c')
|
||||
0
|
||||
select row('A' COLLATE latin1_general_ci,'b','c') = row('a' COLLATE latin1_bin,'b','c');
|
||||
ERROR HY000: Illegal mix of collations (latin1_general_ci,EXPLICIT) and (latin1_bin,EXPLICIT) for operation '='
|
||||
select POSITION(_latin1'B' IN _latin1'abcd');
|
||||
POSITION(_latin1'B' IN _latin1'abcd')
|
||||
2
|
||||
|
Reference in New Issue
Block a user