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.