diff --git a/dbug/dbug.c b/dbug/dbug.c
index 831c69bcdfbd428b93a0076848652e98d8c1ccc3..ce692552045e32277c6b2506871969706c7eaf8a 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -71,9 +71,7 @@
  *
  */
 
-#ifdef DBUG_OFF
-#undef DBUG_OFF
-#endif
+
 #include <my_global.h>
 #include <m_string.h>
 #include <errno.h>
@@ -81,6 +79,10 @@
 #include <process.h>
 #endif
 
+
+#ifndef DBUG_OFF
+
+
 /*
  *            Manifest constants which may be "tuned" if desired.
  */
@@ -313,6 +315,7 @@ static unsigned long Clock(void);
 #define ChangeOwner(cs,name)
 #endif
 
+
 /*
 ** Macros to allow dbugging with threads
 */
@@ -2351,3 +2354,5 @@ va_list ap;
 }
 
 #endif  /* NO_VARARGS */
+
+#endif
diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result
index 7759a6f1f7f05313119ead427c05485de10c5949..b473bbac92309b0b999f1ba28545fb08c416131b 100644
--- a/mysql-test/r/show_check.result
+++ b/mysql-test/r/show_check.result
@@ -695,4 +695,19 @@ Level	Code	Message
 Warning	1541	The syntax 'SHOW PLUGIN' is deprecated and will be removed in MySQL 5.2. Please use 'SHOW PLUGINS' instead
 show plugin;
 show plugins;
+create database `mysqlttest\1`;
+create table `mysqlttest\1`.`a\b` (a int);
+show tables from `mysqlttest\1`;
+Tables_in_mysqlttest\1
+a\b
+show fields from `mysqlttest\1`.`a\b`;
+Field	Type	Null	Key	Default	Extra
+a	int(11)	YES		NULL	
+show columns from `a\b` from `mysqlttest\1`;
+Field	Type	Null	Key	Default	Extra
+a	int(11)	YES		NULL	
+show keys from `mysqlttest\1`.`a\b`;
+Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment
+drop table `mysqlttest\1`.`a\b`;
+drop database `mysqlttest\1`;
 End of 5.1 tests
diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test
index e99387bf6955bc6410e8662ff428e402529b9c9d..553b3d9059bfb130e59daa04118affbcacd6342b 100644
--- a/mysql-test/t/show_check.test
+++ b/mysql-test/t/show_check.test
@@ -539,4 +539,17 @@ show plugin;
 show plugins;
 --enable_result_log
 
+#
+# Bug #19874: SHOW COLUMNS and SHOW KEYS handle identifiers containing
+# \ incorrectly
+#
+create database `mysqlttest\1`;
+create table `mysqlttest\1`.`a\b` (a int);
+show tables from `mysqlttest\1`;
+show fields from `mysqlttest\1`.`a\b`;
+show columns from `a\b` from `mysqlttest\1`;
+show keys from `mysqlttest\1`.`a\b`;
+drop table `mysqlttest\1`.`a\b`;
+drop database `mysqlttest\1`;
+
 --echo End of 5.1 tests
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 5b2a07ab5e07fda8ce902daa00b6152e5c72aa2d..6773802c6e98531199ff9d9849708d8e8b523323 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -7592,10 +7592,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
     }
     switch (method-1) {
     case 0: 
-      method_conv= MI_STATS_METHOD_NULLS_EQUAL;
+      method_conv= MI_STATS_METHOD_NULLS_NOT_EQUAL;
       break;
     case 1:
-      method_conv= MI_STATS_METHOD_NULLS_NOT_EQUAL;
+      method_conv= MI_STATS_METHOD_NULLS_EQUAL;
       break;
     case 2:
       method_conv= MI_STATS_METHOD_IGNORE_NULLS;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 2aceccd1c92c26512ce4e84f8c3314e5f577197c..357fcf8a01c920f05330dcc059ee12a4e22c4545 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -67,7 +67,6 @@ static int check_for_max_user_connections(THD *thd, USER_CONN *uc);
 static void decrease_user_connections(USER_CONN *uc);
 #endif /* NO_EMBEDDED_ACCESS_CHECKS */
 static bool check_multi_update_lock(THD *thd);
-static void remove_escape(char *name);
 static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables);
 
 const char *any_db="*any*";	// Special symbol for check_access
@@ -1442,7 +1441,6 @@ int mysql_table_dump(THD* thd, char* db, char* tbl_name)
   }
   if (lower_case_table_names)
     my_casedn_str(files_charset_info, tbl_name);
-  remove_escape(table_list->table_name);
 
   if (!(table=open_ltable(thd, table_list, TL_READ_NO_INSERT)))
     DBUG_RETURN(1);
@@ -1909,7 +1907,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
     general_log_print(thd, command, "%s %s", table_list.table_name, fields);
     if (lower_case_table_names)
       my_casedn_str(files_charset_info, table_list.table_name);
-    remove_escape(table_list.table_name);	// This can't have wildcards
 
     if (check_access(thd,SELECT_ACL,table_list.db,&table_list.grant.privilege,
 		     0, 0, test(table_list.schema_table)))
@@ -2299,7 +2296,6 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
         DBUG_RETURN(1);
       }
       db= lex->select_lex.db;
-      remove_escape(db);				// Fix escaped '_'
       if (check_db_name(db))
       {
         my_error(ER_WRONG_DB_NAME, MYF(0), db);
@@ -2338,8 +2334,6 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
       lex->query_tables_last= query_tables_last;
       TABLE_LIST *table_list= (TABLE_LIST*) sel->table_list.first;
       char *db= table_list->db;
-      remove_escape(db);			// Fix escaped '_'
-      remove_escape(table_list->table_name);
       if (check_access(thd,SELECT_ACL | EXTRA_ACL,db,
                        &table_list->grant.privilege, 0, 0,
                        test(table_list->schema_table)))
@@ -6288,36 +6282,6 @@ add_proc_to_list(THD* thd, Item *item)
 }
 
 
-/* Fix escaping of _, % and \ in database and table names (for ODBC) */
-
-static void remove_escape(char *name)
-{
-  if (!*name)					// For empty DB names
-    return;
-  char *to;
-#ifdef USE_MB
-  char *strend=name+(uint) strlen(name);
-#endif
-  for (to=name; *name ; name++)
-  {
-#ifdef USE_MB
-    int l;
-    if (use_mb(system_charset_info) &&
-        (l = my_ismbchar(system_charset_info, name, strend)))
-    {
-	while (l--)
-	    *to++ = *name++;
-	name--;
-	continue;
-    }
-#endif
-    if (*name == '\\' && name[1])
-      name++;					// Skip '\\'
-    *to++= *name;
-  }
-  *to=0;
-}
-
 /****************************************************************************
 ** save order by and tables in own lists
 ****************************************************************************/