Oprava rozbitého UTF8 po importu, přesunu nebo updatu MySQL serveru

Stalo se vám, že po nějakém importu databáze, updatu serveru nebo přesunu databáze na jiný server se znaky s UTF8 zobrazují špatně?

Konverze kódování

Řešení je celkem jednoduché, stačí vyhledat sloupce, ve kterých jsou znaky rozbité a nechat databázi, aby je znovu převedla na UTF8:

UPDATE tabulka 
    SET sloupec = CONVERT(BINARY CONVERT(sloupec USING latin1) USING utf8);

Všimněte si, že jméno sloupce je v příkazu dvakrát.

Pokud máme takto rozbitý WordPress, stačí použít následující příkazy:

UPDATE wp_posts SET post_title = CONVERT(BINARY CONVERT(post_title USING latin1) USING utf8), post_content = CONVERT(BINARY CONVERT(post_content USING latin1) USING utf8);
UPDATE wp_comments SET comment_author = CONVERT(BINARY CONVERT(comment_author USING latin1) USING utf8), comment_content = CONVERT(BINARY CONVERT(comment_content USING latin1) USING utf8);
UPDATE wp_terms SET name = CONVERT(BINARY CONVERT(name USING latin1) USING utf8);
UPDATE wp_yoast_indexable SET breadcrumb_title = CONVERT(BINARY CONVERT(breadcrumb_title USING latin1) USING utf8);

Poznámka: pokud se WordPress nezobrazuje správně v UTF-8, zkontrolujte také, zda je v souboru wp-config.php nadefinována příslušná konstanta; některé pluginy ji mohou záměrně či nechtěně smazat, zakomentovat či změnit na něco jiného.

define('DB_CHARSET', 'utf8');

Záloha!

Pozor na to, že ne všechny znaky musí jít převést a můžete tak naopak vytvořit problém v řádkách, které byly správně.

Před použitím příkazů proto doporučuji rozbité tabulky zálohovat, abyste se mohli později vrátit k původním datům.

Také můžete nejprve příkazy simulovat, a ověřit, jaký bude výsledek. Znaky, které nejdou převést MySQL nahlásí jako chybu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..