--- mysql-5.1-trunk/mysys/mf_iocache2.c	2007-02-24 02:43:10.000000000 -0800
+++ mysql-5.1/mysys/mf_iocache2.c	2007-04-19 13:32:13.000000000 -0700
@@ -299,6 +299,7 @@
   uint minimum_width; /* as yet unimplemented */
   uint minimum_width_sign;
   uint precision; /* as yet unimplemented for anything but %b */
+  my_bool is_zero_padded;
 
   /*
     Store the location of the beginning of a format directive, for the
@@ -337,8 +338,10 @@
     minimum_width= 0;
     precision= 0;
     minimum_width_sign= 1;
+    is_zero_padded= FALSE;
     /* Skip if max size is used (to be compatible with printf) */
     while (*fmt == '-') { fmt++; minimum_width_sign= -1; }
+    while (*fmt == '0') { fmt++; is_zero_padded= TRUE; }
     if (*fmt == '*') {
       precision= (int) va_arg(args, int);
       fmt++;
@@ -390,6 +393,15 @@
 	length2= (uint) (int10_to_str((long) iarg,buff, -10) - buff);
       else
 	length2= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff);
+	if (minimum_width > length2) 
+	{
+		char buffz[17];
+		if (is_zero_padded)
+			memset(buffz, '0', minimum_width - length2);
+		else
+			memset(buffz, ' ', minimum_width - length2);
+		my_b_write(info, buffz, minimum_width - length2);
+	}
       out_length+= length2;
       if (my_b_write(info, buff, length2))
 	goto err;
