Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy to bezpieczny sposób na konwersję tabel MySQL z latin1 na utf-8?

Należy wziąć pod uwagę 3 różne przypadki:

Wartości są rzeczywiście zakodowane przy użyciu Latin1

To jest spójny przypadek:zadeklarowany zestaw znaków i kodowanie treści są zgodne. To był jedyny przypadek, który omówiłem w mojej początkowej odpowiedzi.

Użyj sugerowanego polecenia:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Zauważ, że CONVERT TO CHARACTER SET Polecenie pojawiło się tylko w MySQL 4.1.2, więc każdy, kto używał bazy danych zainstalowanej przed 2005 rokiem, musiał użyć triku eksportu/importu. Dlatego w Internecie jest tak wiele starszych skryptów i dokumentów, które robią to po staremu.

Wartości są już zakodowane przy użyciu utf8

W takim przypadku nie chcesz, aby mysql konwertował jakiekolwiek dane, wystarczy zmienić metadane kolumny.

W tym celu musisz najpierw zmienić typ na BLOB, a następnie na TEXT utf8 dla każdej kolumny, aby nie było konwersji wartości:

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

Jest to zalecany sposób i jest wyraźnie udokumentowany w Alter Dokumentacja składni tabeli .

Wartości używane w innym kodowaniu

Domyślnym kodowaniem było Latin1 przez kilka lat w niektórych dystrybucjach Linuksa. W takim przypadku musisz użyć kombinacji dwóch technik:

  • Napraw metadane tabeli, używając sztuczki typu BLOB
  • Konwertuj wartości za pomocą CONVERT TO .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz bazę danych MySQL w systemie Linux za pomocą wiersza poleceń

  2. Wdrażanie aplikacji Java z bazą danych mysql desktop

  3. Optymalizacja zapytań dla następnego i poprzedniego elementu

  4. próbuję uzyskać liczbę miesięcy

  5. Wyzwalacze MySQL i SUM()