diff --git a/include/mysql_com.h b/include/mysql_com.h
index b1dd6152cf45bea68d22ab9a943f5d91e8117075..b3a632802c1adacf8abc81716243b468f4287613 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -26,9 +26,6 @@
 #define USERNAME_LENGTH 16
 #define SERVER_VERSION_LENGTH 60
 #define SQLSTATE_LENGTH 5
-#define SYSTEM_CHARSET_MBMAXLEN 3
-#define NAME_BYTE_LEN   NAME_LEN*SYSTEM_CHARSET_MBMAXLEN
-#define USERNAME_BYTE_LENGTH USERNAME_LENGTH*SYSTEM_CHARSET_MBMAXLEN
 
 /*
   USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 51f361349e6c8b51d2cbc7dc51a31230895fb64b..bf271437faca4cef50ac09964b30b9bd7b3a6174 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -1340,19 +1340,6 @@ select a from t1 group by a;
 a
 e
 drop table t1;
-set names utf8;
-grant select on test.* to юзер_юзер@localhost;
-user()
-юзер_юзер@localhost
-revoke all on test.* from юзер_юзер@localhost;
-drop user юзер_юзер@localhost;
-create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-select database();
-database()
-имя_базы_в_кодировке_утф8_длиной_больше_чем_45
-drop database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use test;
 CREATE TABLE t1(id varchar(20) NOT NULL) DEFAULT CHARSET=utf8;
 INSERT INTO t1 VALUES ('xxx'), ('aa'), ('yyy'), ('aa');
 SELECT id FROM t1;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index b6137d5f0846e8a295ead2a4443a140592abbd16..39928f18f2ebbdad14a78484cdebc8e68e3c9e7c 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -1069,23 +1069,6 @@ explain select a from t1 group by a;
 select a from t1 group by a;
 drop table t1;
 
-#
-# Bug#20393: User name truncation in mysql client
-# Bug#21432: Database/Table name limited to 64 bytes, not chars, problems with multi-byte
-#
-set names utf8;
-#create user юзер_юзер@localhost;
-grant select on test.* to юзер_юзер@localhost;
---exec $MYSQL --default-character-set=utf8 --user=юзер_юзер -e "select user()"
-revoke all on test.* from юзер_юзер@localhost;
-drop user юзер_юзер@localhost;
-
-create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-select database();
-drop database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use test;
-
 # End of 4.1 tests
 
 #
diff --git a/sql-common/client.c b/sql-common/client.c
index fc483e7b4c7ade27e592fc63d234bee3db9f78a2..cfd53fb1012d3dc2d9b08d3d883e3f58270228f1 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -1758,7 +1758,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
 		       const char *passwd, const char *db,
 		       uint port, const char *unix_socket,ulong client_flag)
 {
-  char		buff[NAME_BYTE_LEN+USERNAME_BYTE_LENGTH+100];
+  char		buff[NAME_LEN+USERNAME_LENGTH+100];
   char		*end,*host_info;
   my_socket	sock;
   in_addr_t	ip_addr;
@@ -2217,7 +2217,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
 		     mysql->server_status, client_flag));
   /* This needs to be changed as it's not useful with big packets */
   if (user && user[0])
-    strmake(end,user,USERNAME_BYTE_LENGTH);          /* Max user name */
+    strmake(end,user,USERNAME_LENGTH);          /* Max user name */
   else
     read_user_name((char*) end);
 
@@ -2247,7 +2247,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
   /* Add database if needed */
   if (db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB))
   {
-    end= strmake(end, db, NAME_BYTE_LEN) + 1;
+    end= strmake(end, db, NAME_LEN) + 1;
     mysql->db= my_strdup(db,MYF(MY_WME));
     db= 0;
   }
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 010a5c33b96ac0ac8ff45b685c3c613e31250be5..1786ad5972d67da8b4e17cb2170db9ed9097451b 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -3232,10 +3232,11 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
       result= TRUE;
       continue;
     }  
-    if (replace_user_table(thd, tables[0].table, *Str,
-                           (!db ? rights : 0), revoke_grant, create_new_users,
-                           test(thd->variables.sql_mode &
-                                MODE_NO_AUTO_CREATE_USER)))
+    if ((replace_user_table(thd,
+			    tables[0].table,
+			    *Str,
+			    (!db ? rights : 0), revoke_grant,
+			    create_new_users)))
       result= -1;
     else if (db)
     {
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index ddd39bd1c9ec24735bc8a40d11cc3df1b0d4f876..86407b7142708763e7ac703a566076b91d104394 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1001,8 +1001,8 @@ static int check_connection(THD *thd)
   char *passwd= strend(user)+1;
   uint user_len= passwd - user - 1;
   char *db= passwd;
-  char db_buff[NAME_BYTE_LEN + 1];              // buffer to store db in utf8
-  char user_buff[USERNAME_BYTE_LENGTH + 1];	// buffer to store user in utf8
+  char db_buff[NAME_LEN + 1];           // buffer to store db in utf8
+  char user_buff[USERNAME_LENGTH + 1];	// buffer to store user in utf8
   uint dummy_errors;
 
   /*
diff --git a/sql/table.cc b/sql/table.cc
index 054736401ffd5473bdec9f4401b74dd57c96193a..1886fdb0b8267c1c5f942856498c419e5f7967c8 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1592,7 +1592,7 @@ char *get_field(MEM_ROOT *mem, Field *field)
 
 bool check_db_name(char *name)
 {
-  uint name_length= 0;  // name length in symbols
+  char *start= name;
   /* Used to catch empty names and names with end space */
   bool last_char_is_space= TRUE;
 
@@ -1609,7 +1609,6 @@ bool check_db_name(char *name)
                           name+system_charset_info->mbmaxlen);
       if (len)
       {
-        name_length++;
         name += len;
         continue;
       }
@@ -1617,13 +1616,12 @@ bool check_db_name(char *name)
 #else
     last_char_is_space= *name==' ';
 #endif
-    name_length++;
     if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR ||
 	*name == FN_EXTCHAR)
       return 1;
     name++;
   }
-  return (last_char_is_space || name_length > NAME_LEN);
+  return last_char_is_space || (uint) (name - start) > NAME_LEN;
 }