diff --git a/heap/hp_hash.c b/heap/hp_hash.c
index 52a250bd7af8ce4c7749260be710f31095201bad..7f02eb587a87dfc07497412270b92019237cd683 100644
--- a/heap/hp_hash.c
+++ b/heap/hp_hash.c
@@ -635,13 +635,12 @@ int hp_key_cmp(HP_KEYDEF *keydef, const byte *rec, const byte *key)
       key+= 2;                                  /* skip key pack length */
       if (cs->mbmaxlen > 1)
       {
-        uint char_length= seg->length / cs->mbmaxlen;
-        char_length_key= my_charpos(cs, key, key + char_length_key,
-                                    char_length);
-        set_if_smaller(char_length_key, seg->length);
-        char_length_rec= my_charpos(cs, pos, pos + char_length_rec,
-                                    char_length);
-        set_if_smaller(char_length_rec, seg->length);
+        uint char_length1, char_length2;
+        char_length1= char_length2= seg->length / cs->mbmaxlen; 
+        char_length1= my_charpos(cs, key, key + char_length_key, char_length1);
+        set_if_smaller(char_length_key, char_length1);
+        char_length2= my_charpos(cs, pos, pos + char_length_rec, char_length2);
+        set_if_smaller(char_length_rec, char_length2);
       }
 
       if (cs->coll->strnncollsp(seg->charset,
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index 0aa5e759207d5f4e0db9610641230d30ff0fdbb3..6104fc772b459caefc3d1d86fa1889d1c0aa43df 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -734,3 +734,7 @@ x_real	NULL	NULL
 x_float	NULL	NULL
 x_double_precision	NULL	NULL
 drop table t1;
+SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
+table_schema	count(*)
+information_schema	15
+mysql	17
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 1739604372a530c25325a1c9a1d85953e40a3950..2da814526a24b71ea23164df0230544fea3eff5b 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -1,4 +1,4 @@
-# This test uses grants, which can't get tested for embedded server
+# This test  uses grants, which can't get tested for embedded server
 -- source include/not_embedded.inc
 
 # Test for information_schema.schemata &
@@ -473,3 +473,9 @@ SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME= 't1';
 drop table t1;
+
+#
+# Bug #9404  information_schema: Weird error messages 
+# with SELECT SUM() ... GROUP BY queries
+#
+SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;