sql >> Databáze >  >> Database Tools >> phpMyAdmin

Co se stane s existujícími daty, pokud změním řazení sloupce v MySQL?

Článek http://mysqldump.azundris.com/archives/60 -Handling-character-sets.html obšírně o tom diskutuje a také ukazuje, co se stane.

Vezměte prosím na vědomí, že zaměňujete SADA ZNAKŮ (ve skutečnosti kódování) s KOLÁCÍ.

Znaková sada definuje fyzickou reprezentaci řetězce v bajtech na disku. Můžete to zviditelnit pomocí funkce HEX(), například SELECT HEX(str) FROM t WHERE id = 1 abyste viděli, jak MySQL ukládá bajty vašeho řetězce. To, co vám MySQL poskytuje, se může lišit v závislosti na znakové sadě vašeho připojení, definované pomocí SET NAMES .... .

Porovnání je pořadí řazení. Záleží na znakové sadě. Vaše data mohou být například ve znakové sadě latin1, ale mohou být uspořádána podle jednoho ze dvou německých pořadí řazení latin1_german1_ci nebo latin1_german2_ci. V závislosti na vaší volbě budou přehlásky jako ö buď řazeny jako oe nebo jako o.

Když měníte znakovou sadu, je třeba přepsat data ve vaší tabulce. MySQL přečte všechna data a všechny indexy v tabulce, vytvoří skrytou kopii tabulky, která dočasně zabere místo na disku, poté přesune starou tabulku na skryté místo, přesune skrytou tabulku na místo a poté stará data odstraní, čímž uvolní zvětšit místo na disku. Na nějakou dobu mezitím budete potřebovat dvojnásobné úložiště.

Když měníte řazení, změní se pořadí řazení dat, ale ne samotná data. Pokud sloupec, který měníte, není součástí indexu, není třeba dělat nic jiného než přepsat soubor frm a dostatečně nejnovější verze MySQL by toho neměly dělat víc.

Když měníte řazení sloupce, který je součástí indexu, je třeba index přepsat, protože index je seřazený výňatek z tabulky. To znovu spustí logiku kopírování tabulky ALTER TABLE popsanou výše.

MySQL se snaží uchovat data takto:Dokud data, která máte, mohou být reprezentována v cílové znakové sadě, převod nebude ztrátový. Upozornění se vytisknou, pokud dojde ke zkrácení dat a data, která nemohou být reprezentována v cílové znakové sadě, budou nahrazena znakem ?



  1. SQL LocalDB - Nelze odstranit DB, když jsou odstraněny její soubory

  2. Sql Server Management Studio jak automaticky používat velká písmena

  3. Jak se odhlásím z phpMyAdmin 4.x - pravděpodobně pomocí hacku?

  4. Vybrán jako oběť uváznutí na jednoduchém Add() -> SaveChanges()