", _T('utf8_convert_timeout'), "


\n"; convert_sql_utf8($titre); echo "

"._T('utf8_convert_termine')."

"; effacer_meta('convert_sql_utf8'); // bouton "retour au site" + redirige_par_entete echo "

", " >> ", _T('icone_retour'),"

", install_fin_html(); } // http://doc.spip.org/@convert_sql_utf8 function convert_sql_utf8($titre){ define(_DEBUG_CONVERT, false); $charset_spip = $GLOBALS['meta']['charset']; $charset_supporte = false; $utf8_supporte = false; // verifier que mysql gere le charset courant pour effectuer les conversions if ($c = sql_get_charset($charset_spip)){ $sql_charset = $c['charset']; $sql_collation = $c['collation']; $charset_supporte = true; } if (!$charset_supporte){ $res = spip_query("SHOW CHARACTER SET"); while ($row = sql_fetch($res)){ if ($row['Charset']=='utf8') $utf8_supporte = true; } echo install_debut_html($titre); echo _L("Le charset SPIP actuel $charset_spip n'est pas supporte par votre serveur MySQL
"); # non traduit car complexe & obsolete if ($utf8_supporte) echo _L("Votre serveur supporte utf-8, vous devriez convertir votre site en utf-8 avant de recommencer cette operation"); echo install_fin_html(); } else { echo _L("Charset Actuel du site SPIP : $charset_spip
"); echo _L("Conversion des champs des tables spip de type latin1 vers $sql_charset (collation $sql_collation)
"); // lister les collations et leur charset correspondant $res = spip_query("SHOW COLLATION"); $charset2collations = array(); while ($row = sql_fetch($res)){ $charset2collations[$row['Collation']] = $row['Charset']; } $count = 0; // lister les tables spip include_spip('base/serial'); include_spip('base/auxiliaires'); $res = spip_query("SHOW TABLES"); while (($row = sql_fetch($res)) /*&& ($count<1)*/){ $nom = array_shift($row); if (preg_match(',^'.$GLOBALS['table_prefix'].'_(.*)$,',$nom,$regs)){ $count++; $nom = $regs[1]; echo "

$nom

"; // lister les champs de la table $res2 = spip_query("SHOW FULL COLUMNS FROM spip_$nom"); while ($row2 = sql_fetch($res2)){ $collation = $row2['Collation']; $champ = $row2['Field']; if ($collation!="NULL" && isset($charset2collations[$collation]) && $charset2collations[$collation]=='latin1'){ echo "Conversion de '$champ' depuis $collation (".$charset2collations[$collation]."):"; // conversion de latin1 vers le charset reel du contenu $type_texte= $row2['Type']; $type_blob = "blob"; if (strpos($type_texte,"text")!==FALSE) $type_blob = str_replace("text","blob",$type_texte); // sauf si blob expressement demande dans la description ! if (( $a = $GLOBALS['tables_principales']['spip_'.$nom]['field'][$champ] OR $a = $GLOBALS['tables_auxiliaires']['spip_'.$nom]['field'][$champ] ) AND preg_match(',blob,i', $a)) { echo "On ignore le champ blob $nom.$champ
\n"; } else { $default = $row2['Default']?(" DEFAULT ".sql_quote($row2['Default'])):""; $notnull = ($row2['Null']=='YES')?"":" NOT NULL"; $q = "ALTER TABLE spip_$nom CHANGE $champ $champ $type_blob $default $notnull"; if (!_DEBUG_CONVERT) $b = spip_query($q); echo "
$q
$b\n"; $q = "ALTER TABLE spip_$nom CHANGE $champ $champ $type_texte CHARACTER SET $sql_charset COLLATE $sql_collation $default $notnull"; if (!_DEBUG_CONVERT) $b = spip_query($q); echo "
$q
\n"; } } } // on ne change le charset par defaut de la table que quand tous ses champs sont convertis $q = "ALTER TABLE spip_$nom DEFAULT CHARACTER SET $sql_charset COLLATE $sql_collation"; if (!_DEBUG_CONVERT) $b = spip_query($q); echo "
$q
$b\n"; } } ecrire_meta('charset_sql_base',$sql_charset,'non'); ecrire_meta('charset_sql_connexion',$sql_charset,'non'); } } ?>