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

Je to bezpečný způsob, jak převést tabulky MySQL z latin1 na utf-8?

Je třeba zvážit 3 různé případy:

Hodnoty jsou skutečně zakódovány pomocí Latin1

Toto je konzistentní případ:deklarovaná shoda znakové sady a kódování obsahu. Toto byl jediný případ, kterým jsem se zabýval ve své první odpovědi.

Použijte příkaz, který jste navrhli:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Všimněte si, že CONVERT TO CHARACTER SET příkaz se objevil pouze v MySQL 4.1.2, takže každý, kdo používá databázi nainstalovanou před rokem 2005, musel použít trik pro export/import. To je důvod, proč je na internetu tolik starších skriptů a dokumentů, které to dělají starým způsobem.

Hodnoty jsou již zakódovány pomocí utf8

V tomto případě nechcete, aby mysql převáděl žádná data, stačí změnit metadata sloupce.

Chcete-li to provést, musíte nejprve změnit typ na BLOB a poté na TEXT utf8 pro každý sloupec, aby nedocházelo k převodům hodnot:

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8

Toto je doporučený způsob a je výslovně zdokumentován v Alter Dokumentace syntaxe tabulky .

Hodnoty používané v jiném kódování

Výchozí kódování bylo Latin1 několik let na některých distribucích Linuxu. V tomto případě musíte použít kombinaci dvou technik:

  • Opravte metadata tabulky pomocí triku typu BLOB
  • Převeďte hodnoty pomocí CONVERT TO .


  1. Připojte se ke vzdálené databázi PostgreSql pomocí Powershell

  2. Jak předat pole řetězců v parametru SQL do klauzule IN v SQL

  3. Uživateli byl odepřen přístup Java JDBC

  4. žádný sqljdbc_auth v java.library.path