UTF to tak naprawdę utfmb3 i może używać maksymalnie 3 bajtów na znak, podczas gdy utfmb4 może używać 4 bajtów na znak. W przypadku kolumn VARCHAR zwykle nie ma to dużej różnicy, ponieważ MySQL będzie przechowywać tylko tyle bajtów, ile potrzeba (chyba że utworzyłeś tabele MyISAM z ROW_FORMAT=FIXED).
Jednak podczas wykonywania zapytania MySQL może tworzyć tymczasowe tabele w mechanizmie przechowywania MEMORY, który nie obsługuje wierszy o zmiennej długości. Te tabele tymczasowe mają maksymalny rozmiar i jeśli ten rozmiar zostanie przekroczony, tabele tymczasowe zostaną przekonwertowane na tabele w MyISAM/InnoDB (w zależności od wersji MySQL). Zmienna stanu Created_tmp_disk_tables
będzie zwiększany za każdym razem, gdy to się stanie. Jeśli tak, spróbuj sprawdzić, czy pomaga zwiększyć wartość max_heap_table_size
i tmp_table_size
.
Alternatywnie, uaktualnij do MySQL 8.0, gdzie nowy mechanizm przechowywania obsługujący wiersze o zmiennej długości jest używany do wewnętrznych tabel tymczasowych.