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);
|