diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 0356ea02adafb6df48ede7db95d683e5839fd6bd..582277cd142a4f2075151dba55307e1b4ade6327 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -213,14 +213,21 @@ void Item_bool_func2::fix_length_and_dec()
       {
         THD *thd= current_thd;
         /*
-          In case we're in statement prepare, create conversion item
-          in its memory: it will be reused on each execute.
+          In case we're in prepared statement, create conversion
+          item in its memory: it will be reused on each execute.
+          (and don't juggle with mem_root's if it is ordinary statement).
+          We come here only during first fix_fields() because after creating
+          conversion item we will have arguments with compatible collations.
         */
         Item_arena *arena= thd->current_arena, backup;
-        thd->set_n_backup_item_arena(arena, &backup);
+        if (arena->is_conventional())
+          arena= 0;
+        else
+          thd->set_n_backup_item_arena(arena, &backup);
 	conv= new Item_func_conv_charset(args[weak],
                                          args[strong]->collation.collation);
-        thd->restore_backup_item_arena(arena, &backup);
+        if (arena)
+          thd->restore_backup_item_arena(arena, &backup);
         conv->collation.set(args[weak]->collation.derivation);
         conv->fix_fields(thd, 0, &conv);
       }