sql >> Databáze >  >> RDS >> Mysql

Změna kódování znaků MySQL. Je zachována integrita dat?

Každý sloupec (typ řetězce znaků). má své vlastní znaková sada a metadata řazení.

Pokud, když sloupec byl zadán datový typ (tj. když byl naposledy vytvořen nebo pozměněn), nebyla explicitně zadána žádná znaková sada/třídění, pak by se pro sloupec použila výchozí znaková sada a řazení tabulky.

Pokud, když tabulka byla zadána, nebyla explicitně zadána žádná výchozí znaková sada/třídění, pak by se pro výchozí tabulku použila výchozí znaková sada a řazení databáze.

Příkazy, které citujete ve své otázce, pouze mění takové výchozí znakové sady/kombinace pro databázi a tabulku. Jinými slovy, ovlivní pouze tabulky a sloupce, které budou vytvořeny poté – nebudou ovlivnit existující sloupce (nebo data).

Chcete-li aktualizovat stávající data, měli byste si nejprve přečíst Změna znakové sady části manuálové stránky na ALTER TABLE :

Chcete-li změnit pouze výchozí znaková sada pro tabulku, použijte tento příkaz:

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

Slovo DEFAULT je volitelný. Výchozí znaková sada je znaková sada, která se používá, pokud neurčíte znakovou sadu pro sloupce, které přidáte do tabulky později (například pomocí ALTER TABLE ... ADD column ).

Když foreign_key_checks je povolena systémová proměnná, což je výchozí nastavení, převod znakové sady není povolen u tabulek, které obsahují sloupec znakového řetězce použitý v omezení cizího klíče. Řešením je deaktivace foreign_key_checks před provedením konverze znakové sady. Než znovu povolíte foreign_key_checks . Pokud znovu povolíte foreign_key_checks po převodu pouze jedné z tabulek se zobrazí ON DELETE CASCADE nebo ON UPDATE CASCADE operace by mohla poškodit data v referenční tabulce kvůli implicitnímu převodu, ke kterému během těchto operací dochází (chyba #45290, chyba #74816).




  1. Protokol transakcí serveru SQL – část 1

  2. Jak Access komunikuje se zdroji dat ODBC? Část 2

  3. Náš server nemůže zpracovat více než 20 požadavků za sekundu

  4. Efektivně kopírujte/duplikujte/zálohujte databázové tabulky - mysql