Revertendo WordPress utf8mb4 para utf8

WordPress
WordPress
Compartilhe

Veja como reverter o uso do padrão utf8mb4 para utf8, útil caso esteja trabalhando em um projeto onde o servidor de produção não esta com o MySQL atualizado.

A partir da versão WordPress 4.2, entrou o suporte ao padrão Unicode utf8mb4, que nada mais é que uma evolução do anterior utf8 com suporte a mais caracteres e emojis. Esta nova versão esta presente a partir do MySQL 5.5.3 e o WordPress fará uso dela quando detectar que seja possível. Isto é feito de forma automática, porém caso precise migrar seu site para um outro servidor, pode acabar descobrindo que neste outro servidor a versão do MySQL não possua suporte ao novo padrão e com isso você terá problemas para importar os dados do seu banco de dados. Como resolver?

Tendo acesso ao banco de dados através do PHPMyAdmin ou outra interface, você deve rodar a query abaixo para cada tabela a ser convertida, alterando o nome wp_tabela para a tabela desejada, normalmente somente as que correspondem ao core do WordPress, tabelas de plugins provavelmente não precisarão passar por esta conversão. Após feito a conversão não se esqueça de informar no arquivo de configuração o valor utf8 para a constante DB_CHARSET.

ALTER TABLE `wp_tabela` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Para facilitar criei esta função que pode ser inserida dentro do arquivo functions.php do seu tema e executada a partir dele. Após usar basta remove-la ou desligar a chamada para a execução da função. Importante, somente as tabelas do WordPress serão convertidas, qualquer plugin que possua alguma tabela própria, esta será mantida intacta.

// Reverte o banco de dados de utf8mb4 para utf8
// Não esqueça de alterar o charset em wp-config.php
function revert_utf8mb4() {
    global $wpdb;
    
    $sql = 'ALTER TABLE `%s` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;';
    
    $wpdb->query(sprintf($sql, $wpdb->commentmeta));
    $wpdb->query(sprintf($sql, $wpdb->comments));
    $wpdb->query(sprintf($sql, $wpdb->links));
    $wpdb->query(sprintf($sql, $wpdb->options));
    $wpdb->query(sprintf($sql, $wpdb->postmeta));
    $wpdb->query(sprintf($sql, $wpdb->posts));
    $wpdb->query(sprintf($sql, $wpdb->term_relationships));
    $wpdb->query(sprintf($sql, $wpdb->term_taxonomy));
    $wpdb->query(sprintf($sql, $wpdb->terms));
    $wpdb->query(sprintf($sql, $wpdb->termmeta));
    $wpdb->query(sprintf($sql, $wpdb->usermeta));
    $wpdb->query(sprintf($sql, $wpdb->users));

    if(DB_CHARSET != 'utf8')
        $alert = 'Corrija a constante DB_CHARSET no arquivo wp-config.php para "utf8".';
        
    die("Tudo Pronto! $alert");
}

// Executando
revert_utf8mb4();
19 05 2015

Comentários

comments powered by Disqus