diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 3ce43641ad8..510ce867100 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1344,3 +1344,10 @@ a 2 10 drop table t1,t2; +CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci, +s2 CHAR(5) COLLATE latin1_swedish_ci); +INSERT INTO t1 VALUES ('z','?'); +select * from t1 where s1 > (select max(s2) from t1); +ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '>' +select * from t1 where s1 > any (select max(s2) from t1); +drop table t1; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index e1c9e09ae6d..89f9c528237 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -901,3 +901,14 @@ insert into t3 values (1),(2),(10),(50); select a from t3 where t3.a in (select a from t1 where a <= 3 union select * from t2 where a <= 30); drop table t1,t2; +# +# collation test +# +CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci, + s2 CHAR(5) COLLATE latin1_swedish_ci); +INSERT INTO t1 VALUES ('z','?'); +-- error 1265 +select * from t1 where s1 > (select max(s2) from t1); +-- error 1265 +select * from t1 where s1 > any (select max(s2) from t1); +drop table t1; diff --git a/sql/item.h b/sql/item.h index 296ad18b1f1..c97b66c8c53 100644 --- a/sql/item.h +++ b/sql/item.h @@ -862,6 +862,7 @@ public: { value= item->val_int_result(); null_value= item->null_value; + collation.set(item->collation); } double val() { return (double) value; } longlong val_int() { return value; } @@ -879,6 +880,7 @@ public: { value= item->val_result(); null_value= item->null_value; + collation.set(item->collation); } double val() { return value; } longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); }