MySQL oferuje wybór silników pamięci masowej. Fizyczne przechowywanie danych zależy od silnika przechowywania.
Pamięć MyISAM VARCHAR
W MyISAM, VARCHAR
s zazwyczaj zajmują tylko rzeczywistą długość łańcucha plus jeden lub dwa bajty długości. Jest to praktyczne dzięki ograniczeniu projektowemu MyISAM do blokowania tabeli, w przeciwieństwie do możliwości blokowania wierszy. Konsekwencje wydajności obejmują bardziej kompaktowy profil pamięci podręcznej, ale także bardziej skomplikowane (wolniejsze) obliczanie przesunięć rekordów.
(W rzeczywistości MyISAM daje Ci stopień wyboru między stałym fizycznym rozmiarem wiersza a zmiennym fizycznym rozmiarem wiersza formatów tabeli w zależności od typów kolumn występujących w całej tabeli. Wystąpienie VARCHAR
zmienia tylko domyślną metodę, ale obecność TEXT
Blob siły VARCHAR
s w tej samej tabeli, aby użyć metody zmiennej długości.)
Metoda fizycznego przechowywania jest szczególnie ważna w przypadku indeksów, co jest inną historią niż tabele. MyISAM używa kompresji spacji dla obu CHAR
i VARCHAR
kolumn, co oznacza, że krótsze dane zajmują mniej miejsca w indeksie w obu przypadkach.
Przechowywanie VARCHAR InnoDB
InnoDB, podobnie jak większość innych obecnych relacyjnych baz danych, wykorzystuje bardziej wyrafinowany mechanizm. VARCHAR
kolumny, których maksymalna szerokość jest mniejsza niż 768 bajtów, będą przechowywane w trybie inline, przy czym zarezerwowane miejsce będzie pasować do tej maksymalnej szerokości. Dokładniej tutaj
:
InnoDB obecnie nie wykonuje kompresji przestrzeni w swoich indeksach, w przeciwieństwie do MyISAM, jak opisano powyżej.
Powrót do pytania
Wszystko to jest jednak tylko szczegółem implementacyjnym, który może się zmieniać między wersjami. Prawdziwa różnica między CHAR
i VARCHAR
jest semantyczny, podobnie jak ten między VARCHAR(20)
i VARCHAR(50)
. Upewniając się, że nie ma sposobu na przechowywanie 30-znakowego ciągu w VARCHAR(20)
, baza danych sprawia, że życie jest łatwiejsze i lepiej zdefiniowane dla różnych procesorów i aplikacji, które podobno integruje w przewidywalne rozwiązanie. To jest wielka sprawa.
Jeśli chodzi konkretnie o nazwiska, to pytanie może dać ci kilka praktycznych wskazówek. Osoby z pełnymi imionami powyżej 70 znaków UTF-8 i tak mają kłopoty.