S čím vám můžeme pomoci?

Jak opravit poškozené tabulky a zkontrolovat kódování databáze

Jak v phpMyAdmin opravit tabulku s chybou „is marked as crashed“ a jak zjistit a sjednotit kódování na utf8mb4, aby se správně zobrazovala diakritika.

Obsah návodu
  1. Příznaky poškozené tabulky
  2. Oprava tabulek v phpMyAdmin
  3. Kódování a porovnávání
  4. Jak zjistit aktuální kódování
  5. Jak změnit kódování tabulky
  6. Nastavení v aplikaci
  7. Řešení problémů

Poškozená tabulka se projeví chybou při načítání webu nebo chybějícími daty, špatné kódování zase rozbitou diakritikou. Obojí opravíte v phpMyAdmin bez zásahu podpory. Před každým zásahem si ale databázi exportujte podle návodu Jak exportovat databázi?, protože opravu nelze vrátit.

Příznaky poškozené tabulky

  • Web zobrazuje chybu Table './databaze/wp_options' is marked as crashed and should be repaired.
  • Některé stránky, příspěvky nebo komentáře náhle chybí, i když nikdo nic nemazal.
  • WordPress hlásí „Chyba při navazování spojení s databází“, přestože jsou údaje ve wp-config.php správně.
  • Ve phpMyAdmin má tabulka ve sloupci Řádků nebo Velikost hodnotu používá se nebo chybovou hlášku.

Oprava tabulek v phpMyAdmin

  1. Přihlaste se do phpMyAdmin (viz Jak se přihlásit do phpMyAdmin a základní orientace) a v levém panelu klikněte na název databáze.
  2. V záložce Struktura zaškrtněte poškozené tabulky, nebo pod seznamem klikněte na Zaškrtnout vše.
  3. V rozbalovacím seznamu Zaškrtnuté: pod seznamem tabulek vyberte Zkontrolovat tabulku. Ve výsledku vidíte u každé tabulky stav; OK znamená v pořádku.
  4. Vraťte se, tabulky znovu zaškrtněte a vyberte Opravit tabulku.
  5. Nakonec stejným způsobem spusťte Optimalizovat tabulku, která tabulky zkomprimuje a přeuspořádá.

Totéž zvládnete v záložce SQL dotazy (název tabulky upravte):

CHECK TABLE wp_options;
REPAIR TABLE wp_options;
OPTIMIZE TABLE wp_options;
Poznámka

REPAIR TABLE funguje u tabulek typu MyISAM. Tabulky typu InnoDB se opravují samy při startu serveru; pokud u nich přetrvává chyba, obnovte je ze zálohy nebo kontaktujte podporu. Typ tabulky vidíte ve sloupci Typ v záložce Struktura.

Kódování a porovnávání

Kódování určuje, jak databáze ukládá znaky, porovnávání (collation) pak, jak je řadí a porovnává. Doporučené nastavení pro české weby je kódování utf8mb4 a porovnávání utf8mb4_unicode_ci. Zvládne diakritiku, emoji i speciální znaky. Rozbitá diakritika (například ž místo ž nebo otazníky místo písmen) vzniká, když se liší kódování tabulky, spojení a aplikace.

Jak zjistit aktuální kódování

  1. V levém panelu klikněte na název databáze a otevřete záložku Struktura.
  2. Ve sloupci Porovnávání vidíte porovnávání každé tabulky. Pod seznamem se zobrazuje i výchozí porovnávání databáze.
  3. Kliknutím na tabulku a záložku Struktura zjistíte porovnávání jednotlivých textových sloupců.

Jak změnit kódování tabulky

V záložce SQL spusťte pro každou tabulku:

ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Příkaz převede tabulku i všechny její textové sloupce. Výchozí porovnávání celé databáze pro nově vytvářené tabulky změníte v záložce Operace u databáze v části Porovnávání. Alternativně můžete v záložce Operace u tabulky změnit porovnávání a zaškrtnout Změnit porovnávání všech sloupců.

Nastavení v aplikaci

Aplikace musí s databází komunikovat ve stejném kódování. U WordPressu ve wp-config.php zkontrolujte řádky:

define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

U vlastního kódu nastavte kódování hned po připojení, například mysqli_set_charset($spojeni, 'utf8mb4'); nebo v PDO parametrem charset=utf8mb4 v připojovacím řetězci.

Upozornění

Převod kódování neopraví data, která už jsou uložená špatně. Pokud se diakritika rozbila při importu, je spolehlivější databázi znovu naimportovat ze správně zakódovaného souboru (viz Jak naimportovat databázi?) a v importu zvolit kódování souboru utf-8.

Řešení problémů

  • Oprava skončila chybou nebo se tabulka poškozuje opakovaně. Obnovte tabulku ze zálohy a kontaktujte podporu na podpora@datahost.cz.
  • Diakritika je rozbitá jen u starých záznamů. Data byla uložena v jiném kódování; nové záznamy jsou v pořádku. Řešením je export, převod souboru a nový import.
  • ALTER TABLE hlásí příliš dlouhý index. Zkraťte délku indexovaného sloupce, u utf8mb4 jsou znaky delší než u utf8.

Nenašli jste co hledáte?

Obraťte se na nás.
Odpovíme nejpozději do 24 hodin.

Napsat podpoře