diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index e0fb15a83c58823dfc3603bcb4584af762a72a22..0a7f1af45f3a52a2ddbe614675201fdfbf600c5f 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -958,3 +958,12 @@ trigger_schema	trigger_name
 test	tr1
 use test;
 drop table t1;
+create table t1 (a int not null, b int);
+use information_schema;
+select column_name, column_default from columns
+where table_schema='test' and table_name='t1';
+column_name	column_default
+a	NULL
+b	NULL
+use test;
+drop table t1;
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 93b200b8a7c3320db94e569d1325a0b6b76437b6..d6d9f34302bdd3bf4a42c27f1796aacc69027a5d 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -639,3 +639,13 @@ select trigger_schema, trigger_name from triggers where
 trigger_name='tr1';
 use test;
 drop table t1;
+
+#
+# Bug#12518 COLUMN_DEFAULT has wrong value if NOT NULL is set
+#
+create table t1 (a int not null, b int);
+use information_schema;
+select column_name, column_default from columns
+  where table_schema='test' and table_name='t1';
+use test;
+drop table t1;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 397282acb5604ac044c09c726b65ef5de245163b..0a76e9fb753e32e02e50e473a0ccc07063594724 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -2462,6 +2462,7 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
         table->field[5]->set_notnull();
       }
       else if (field->unireg_check == Field::NEXT_NUMBER ||
+               lex->orig_sql_command != SQLCOM_SHOW_FIELDS ||
                field->maybe_null())
         table->field[5]->set_null();                // Null as default
       else