diff --git a/ecrire/exec/convert_utf8.php b/ecrire/exec/convert_utf8.php
index 38d26cac63b4acfba7ed272baa69d39788bba37a..581c9c09ac23ddf38acf660e0340254de28d7d11 100644
--- a/ecrire/exec/convert_utf8.php
+++ b/ecrire/exec/convert_utf8.php
@@ -137,32 +137,49 @@ function exec_convert_utf8_dist() {
 		// lire les donnees dans un array
 		while ($t = spip_fetch_array($s, SPIP_ASSOC)) {
 			$query = array();
+			$mod_extra = false;
 			foreach ($t as $c => $v) {
 				if ($c == $champ) {
 					preg_match(',^<CONVERT (.*?)>,', $v, $reg);
 					$v = substr($v, strlen($reg[0]));
 					$charset_source = $reg[1];
 				}
-				if (is_numeric($v))
-					$query[] = "$c=$v";
-				else
+				if (!is_numeric($v)
+				AND !is_ascii($v)) {
 					$query[] = "$c=" . spip_abstract_quote($v);
+					# traitement special car donnees serializees
+					if ($c == 'extra') $mod_extra = $v;
+				}
 			}
 
 			$set = join(', ', $query);
 			$where = "$id_champ = ".$t[$id_champ];
-			// Cette query ne fait que retablir les donnees existantes
-			
-			$query = "UPDATE $table SET $set WHERE $where" ;
-
-			// On l'enregistre telle quelle sur le fichier de sauvegarde
-			if ($f) fwrite($f, $query.";\n");
 
-			// Mais on la transcode
-			// en evitant une double conversion
-			if ($charset_source != 'utf-8') {
-				spip_query("UPDATE $table SET " . unicode_to_utf_8(charset2unicode($set, $charset_source)) . " WHERE " . unicode_to_utf_8(charset2unicode($where, $charset_source)) . " AND $champ LIKE '<CONVERT %'");
-				echo '.           '; flush();
+			// Cette query ne fait que retablir les donnees existantes
+			if ($set) {
+				$query = "UPDATE $table SET $set WHERE $where" ;
+
+				// On l'enregistre telle quelle sur le fichier de sauvegarde
+				if ($f) fwrite($f, $query.";\n");
+
+				// Mais on la transcode
+				// en evitant une double conversion
+				if ($charset_source != 'utf-8') {
+					spip_query("UPDATE $table SET " . unicode_to_utf_8(charset2unicode($set, $charset_source)) . " WHERE $where AND $champ LIKE '<CONVERT %'");
+					echo '.           '; flush();
+
+					// stocker le nouvel extra
+					if ($mod_extra) {
+						$extra = unserialize($mod_extra);
+						foreach ($extra as $key=>$val)
+							$extra[$key] = unicode_to_utf_8(
+							charset2unicode($val, $charset_source));
+						spip_query("UPDATE $table SET extra="
+							. spip_abstract_quote(serialize($extra))
+							. " WHERE $where"
+						);
+					}
+				}
 			}
 		}
 		spip_free_result($s);