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

Migracja MySQL UTF8 do UTF8MB4 problemy i pytania

  1. Istnieją ograniczenia dotyczące rozmiaru INDEKSU. Wpadłeś na limit, ponieważ utf8mb4 potrzebuje do 4 bajtów na znak , gdzie jako utf8 potrzebuje tylko 3. Tymczasem limit rozmiaru INDEKSU wynosi bajty .

„Rozwiązaniem” jest podjęcie decyzji, co zrobić z indeksem zawyżonym. (więcej poniżej)

2.

ALTER TABLE t CHANGE col col ...

jest taki sam jak bardziej logiczny

ALTER TABLE t MODIFY col ...

Pierwsza pozwala zmienić nazwę kolumny, stąd dwie kopie nazwy kolumny, gdy nie trzeba zmieniać nazwy.

  1. Całkiem prawdopodobne, że masz VARCHAR(255) który zajmuje 767 bajtów w utf8 (3*255+2; "2" to rozmiar pola długości). Odpowiednik w 4-bajtowym utf8mb4 to (191) (4*191+2=766; nie ma miejsca na więcej niż 191).

  2. Nie widziałem artykułu na ten temat. Podejrzewam, że to, co właśnie powiedziałem, jest większością tego, co należy powiedzieć.

Więc...

Plan A :Czy masz foo VARCHAR(255) a to było utf8? Czy dane w nim zawarte są zawsze (teraz iw przyszłości) krótsze niż 191 znaków? Jeśli tak, po prostu wykonaj ALTER.

Plan B :Jeśli potrzebujesz więcej niż 191, czy naprawdę potrzebujesz INDEKSU? DROP INDEX może być alternatywą.

Plan C :Możesz też użyć indeksu „prefiksu”:INDEX(foo(191)) , pozostawiając go VARCHAR(255) . Zwykle indeksy „prefiksowe” są bezużyteczne, ale możesz mieć przypadek użycia, dla którego to działa.

Aby omówić to dalej, podaj SHOW CREATE TABLE dla danej tabeli i omów znaczenie tego konkretnego pola i jego INDEKS.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Powrót do dat bez weekendów

  2. Implementacja i projektowanie architektury systemu powiadomień z wykorzystaniem socket.io node.js i wiadomości przychodzących

  3. MySQL:Nieprawidłowe dane GIS dostarczone do funkcji st_geometryfromtext

  4. Domyślna nazwa bazy danych MySQL

  5. Używanie sqlalchemy do zapytania przy użyciu wielu kolumn, gdzie w klauzuli