[MDEV-23658] Wrong result of WHERE with SUB-SELECT and CONCAT and character set conversion Created: 2020-09-03  Updated: 2023-11-28

Status: Confirmed
Project: MariaDB Server
Component/s: Character Sets, Data Manipulation - Subquery
Affects Version/s: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10
Fix Version/s: 10.4, 10.5, 10.6

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Sergei Petrunia
Resolution: Unresolved Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-23535 SIGSEGV, SIGABRT and SIGILL in typein... Closed

 Description   

This script demonstrates the problem:

SET NAMES latin1;
CREATE OR REPLACE TABLE t1(a INT) ENGINE=MYISAM;
INSERT INTO t1 VALUES (1);
CREATE OR REPLACE TABLE t2(a VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=MYISAM;
INSERT INTO t2 VALUES ('1');
 
-- These queries returns one row as expected
SELECT * FROM t1 WHERE (SELECT CONCAT(a) FROM t1) = (SELECT CONCAT(a) FROM t2);
SELECT * FROM t1 WHERE (SELECT 1,CONCAT(a) FROM t1) = (SELECT 1,CONCAT(a) FROM t2);
 
-- This returns TRUE as expected (Unicode Character 'NO-BREAK SPACE' (U+00A0) is on the both sides)
SELECT _latin1 0xA0 = _utf8 0xC2A0;
 
-- This returns one row as expected
SELECT * FROM t1 WHERE (SELECT CONCAT(a, _latin1 0xA0) FROM t1) = (SELECT CONCAT(a,_utf8 0xC2A0) FROM t2);
 
-- This returns no rows. One row is expected!
SELECT * FROM t1 WHERE (SELECT 1,CONCAT(a, _latin1 0xA0) FROM t1) = (SELECT 1,CONCAT(a,_utf8 0xC2A0) FROM t2);


Generated at Thu Feb 08 09:24:04 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.