diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index 53f8722a0e9533adab1cb54a61bab9309fe54629..638a38a0001a3bc83f78f2d00a702405c71017c6 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -49,9 +49,12 @@ function sql_get_charset($charset, $serveur=''){
   // le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc.
 	$desc = spip_connect($serveur);
 	$c = @$desc['charsets'][$charset];
-	if (!$c) return false;
-	if (!function_exists($f=@$desc['get_charset'])) return false;
-	if ($f($c, $serveur)) return $c;
+	if ($c) {
+		if (function_exists($f=@$desc['get_charset'])) 
+			if ($f($c, $serveur)) return $c;
+	}
+	spip_log("SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul.");
+	return false;
 }
 
 // Cette fonction est systematiquement appelee par les squelettes
@@ -174,15 +177,15 @@ function sql_replace($table, $values, $desc=array(), $serveur='')
 }
 
 // http://doc.spip.org/@sql_showbase
-function sql_showbase($spip=true, $serveur='')
+function sql_showbase($spip=NULL, $serveur='')
 {
-	if ($spip){
+	if ($spip == NULL){
 		$connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
-		$prefixe = $connexion['prefixe'];
-	} else $prefixe ='';
+		$spip = $connexion['prefixe'] . '%';
+	}
 	
 	$f = sql_serveur('showbase', $serveur);
-	return $f("$prefixe%", $serveur);
+	return $f($spip, $serveur);
 }
 
 // http://doc.spip.org/@sql_showtable
diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php
index cbd173f6541f7fa8ed741ed331e7d9964a579566..8535ff4172fc28a12a0bfb644690d27e5675ef08 100644
--- a/ecrire/install/etape_3.php
+++ b/ecrire/install/etape_3.php
@@ -74,15 +74,10 @@ function install_bases(){
 
 	$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
 	$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
-	// s'il y a erreur c'est qu'elle est nouvelle
-	$nouvelle = !@$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
-
-	if ($nouvelle) {
-		// rouvrir la connexion apres l'erreur
-		$GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, 0, $login_db, $pass_db, '', $server_db);
-		$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
-		$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
 
+	$old = sql_showbase($table_prefix  . "_meta", $server_db);
+	if ($old) $old = sql_fetch($old, $server_db);
+	if (!$old) {
 
 		// Si possible, demander au serveur d'envoyer les textes
 		// dans le codage std de SPIP,
@@ -97,8 +92,12 @@ function install_bases(){
 				$charset['collation'];
 			$GLOBALS['meta']['charset_sql_connexion'] = 
 				$charset['charset'];
-		} else spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL");
-
+			$charsetbase = $charset['charset'];
+		} else {
+			spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL");
+			$charsetbase = 'standard';
+		}
+		spip_log("Creation des tables. Codage $charsetbase");
 		creer_base($server_db); // AT LAST
 
 		// memoriser avec quel charset on l'a creee
@@ -111,7 +110,7 @@ function install_bases(){
 	} else {
 
 	  // pour recreer les tables disparues au besoin
-
+	  spip_log("Table des Meta deja la. Verification des autres.");
 	  creer_base($server_db); 
 
 	  $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
@@ -130,7 +129,7 @@ function install_bases(){
 	: test_rappel_nom_base_mysql($server_db);
 
 	$result_ok = @$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
-	if (!$result_ok) return "<!--\n$nouvelle $ligne_rappel\n-->";
+	if (!$result_ok) return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
 
 	if($chmod) {
 		install_fichier_connexion(_FILE_CHMOD_TMP, "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod).");\n");