diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result
index 00436019f85fe5f6e312a736e3269c7dec8aeeb0..a6ad95570f8fdc2e75a27e26d6766c54f580eac5 100644
--- a/mysql-test/r/distinct.result
+++ b/mysql-test/r/distinct.result
@@ -512,3 +512,24 @@ id	IFNULL(dsc, '-')
 2	line number two
 3	line number three
 drop table t1;
+CREATE TABLE t1 (
+ID int(11) NOT NULL auto_increment,
+x varchar(20) default NULL,
+y decimal(10,0) default NULL,
+PRIMARY KEY  (ID),
+KEY (y)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+INSERT INTO t1 VALUES
+(1,'ba','-1'),
+(2,'ba','1150'),
+(306,'ba','-1'),
+(307,'ba','1150'),
+(611,'ba','-1'),
+(612,'ba','1150');
+select count(distinct x,y) from t1;
+count(distinct x,y)
+2
+select count(distinct concat(x,y)) from t1;
+count(distinct concat(x,y))
+2
+drop table t1;
diff --git a/mysql-test/t/distinct.test b/mysql-test/t/distinct.test
index 6483284633fa2c8f0b396453cc0514cc3bb811f1..45bd0c7a51cda49e093e780e9550e502177c2ed8 100644
--- a/mysql-test/t/distinct.test
+++ b/mysql-test/t/distinct.test
@@ -358,3 +358,27 @@ select distinct id, IFNULL(dsc, '-') from t1;
 drop table t1;
 
 # End of 4.1 tests
+
+
+#
+# Bug #15745 ( COUNT(DISTINCT CONCAT(x,y)) returns wrong result)
+#
+CREATE TABLE t1 (
+  ID int(11) NOT NULL auto_increment,
+  x varchar(20) default NULL,
+  y decimal(10,0) default NULL,
+  PRIMARY KEY  (ID),
+  KEY (y)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+INSERT INTO t1 VALUES
+(1,'ba','-1'),
+(2,'ba','1150'),
+(306,'ba','-1'),
+(307,'ba','1150'),
+(611,'ba','-1'),
+(612,'ba','1150');
+
+select count(distinct x,y) from t1;
+select count(distinct concat(x,y)) from t1;
+drop table t1;
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index dc1cf6cc8b716a623e66f2c266f5fb80989af893..1ff82af1e2d10dab8e48e67e5c875cf89005ac5e 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -2564,9 +2564,9 @@ bool Item_sum_count_distinct::setup(THD *thd)
       Field *f= *field;
       enum enum_field_types type= f->type();
       tree_key_length+= f->pack_length();
-      if (!f->binary() && (type == MYSQL_TYPE_STRING ||
-                           type == MYSQL_TYPE_VAR_STRING ||
-                           type == MYSQL_TYPE_VARCHAR))
+      if ((type == MYSQL_TYPE_VARCHAR) ||
+          !f->binary() && (type == MYSQL_TYPE_STRING ||
+                           type == MYSQL_TYPE_VAR_STRING))
       {
         all_binary= FALSE;
         break;