diff --git a/mysql-test/r/func_compress.result b/mysql-test/r/func_compress.result
index 8d6fa9927cee6db85806c92d8779cc789650f209..ed8d66e932722414a4195044969a5bb66ec35b0c 100644
--- a/mysql-test/r/func_compress.result
+++ b/mysql-test/r/func_compress.result
@@ -79,3 +79,13 @@ uncompress(a)	uncompressed_length(a)
 NULL	NULL
 a	1
 drop table t1;
+create table t1(a blob);
+insert into t1 values ('0'), (NULL), ('0');
+select compress(a), compress(a) from t1;
+select compress(a) is null from t1;
+compress(a) is null
+0
+1
+0
+drop table t1;
+End of 4.1 tests
diff --git a/mysql-test/t/func_compress.test b/mysql-test/t/func_compress.test
index 0f3c3cab3072ad8d5aee400b9ff32ec8edc7079a..223a5540f3846d13ee49771384b2e4f198e3dd02 100644
--- a/mysql-test/t/func_compress.test
+++ b/mysql-test/t/func_compress.test
@@ -54,4 +54,16 @@ insert into t1 values(NULL), (compress('a'));
 select uncompress(a), uncompressed_length(a) from t1;
 drop table t1;
 
-# End of 4.1 tests
+#
+# Bug #23254: problem with compress(NULL)
+#
+
+create table t1(a blob);
+insert into t1 values ('0'), (NULL), ('0');
+--disable_result_log
+select compress(a), compress(a) from t1;
+--enable_result_log
+select compress(a) is null from t1;
+drop table t1;
+
+--echo End of 4.1 tests
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 98888226e58841c8e319ac46f6fb8de202bbe0a9..f7408cb5e9fff99b430702a96adb67646e1f4e3f 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2838,6 +2838,7 @@ String *Item_func_compress::val_str(String *str)
     null_value= 1;
     return 0;
   }
+  null_value= 0;
   if (res->is_empty()) return res;
 
   /*