Convertendo UTF8MB4 para UTF8 WordPress

Você está recebendo o erro “Unknown collation: ‘utf8mb4_unicode_ci’” na hora de fazer o import do seu script SQL em um DB mysql antigo do WordPress ? Então neste tutorial veremos como solucionar o problema, ou seja como converter de UTF8MB4 para UTF8 .

Porque ocorre o erro de UTF8?

Com a atualização a partir da versão do WordPress 4.2, foi inserido um novo padrão de codificação 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.

Mas 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 no seu arquivo wp-config.php do WordPress.

Então rode este script SQL

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

Facilitando a conversão

Para facilitar esta conversão abaixo segue um script para ser inserido dentro do seu arquivo function.php que fica localizado no diretório do seu tema, esse script é executado a partir desse tema. Após atualizar a página do seu site, basta remover o script inserido, e não esqueça de atualizar o DB_CHARSET do seu arquivo wp-config.php. 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->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();

Fonte: Blog Edir Pedro

Caso você tenha alguma dúvida ou queira deixar algum feedback, utilize o formulário de comentários abaixo.