/** * Migrer le charset de chaque champ en ne machouillant pas le contenu * @param string $serveur */ function monplugin_migre_charset_champs($serveur=''){ $res = sql_showbase('%',$serveur); while($row = sql_fetch($res,$serveur)){ $table = reset($row); #var_dump($table); $desc = sql_showtable($table,false,$serveur); #var_dump($desc); foreach($desc['field'] as $champ=>$d){ if (strpos($d,'CHARACTER SET latin1')!==false){ //ALTER TABLE `spip_articles` CHANGE `soustitre` `soustitre` TEXT CHARACTER SET BINARY NOT NULL //ALTER TABLE `spip_articles` CHANGE `soustitre` `soustitre` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL $d_binary = str_ireplace('CHARACTER SET latin1','CHARACTER SET BINARY',$d); $d_utf8 = str_ireplace('CHARACTER SET latin1','CHARACTER SET utf8 COLLATE utf8_general_ci',$d); // on passe le champ en binary sql_alter("TABLE $table CHANGE $champ $champ $d_binary",$serveur); // puis en utf8 sql_alter("TABLE $table CHANGE $champ $champ $d_utf8",$serveur); #var_dump($champ); #var_dump($d_utf8); #die(); } if (time()>_TIME_OUT) return; } if (time()>_TIME_OUT) return; } // mettre a jour la meta de connexion via sql_xx car ecrire_meta ne gere pas la base distante $r = array('nom' => 'charset_sql_connexion', 'valeur' => 'utf8'); $desc = sql_showtable("spip_meta",false,$serveur); sql_insertq('spip_meta', $r, $desc, $serveur); sql_updateq('spip_meta', $r,"nom=" . sql_quote($r['nom']),$desc,$serveur); }