W MySQL długość powinna zawsze wynosić 255 lub 65 535 (chyba że istnieją powody specyficzne dla danego typu wyboru innej długości). Istnieją dwa różne sposoby przechowywania ciągów znaków. W przypadku długości do 255 długość jest przechowywana w jednym bajcie, a nie w dwóch, co pozwala zapisać bajt pamięci.
W przypadku długości varchar
długość jest maksymalną. Wartości są przechowywane na stronie na podstawie ich rzeczywistej długości. Tak więc maksymalna długość nie ma wpływu na przechowywanie czegokolwiek innego, z wyjątkiem 1- lub 2-bajtowych długości (w zależności od tego, czy maksymalna jest < = 255 lub> = 256). (Długość stanowiąca potęgę dwóch - z wyjątkiem 256 - nie ma wpływu na pamięć).
Jeśli chodzi o ustawianie długości jako mocy dwóch. Jestem winny tego przy wielu okazjach. Jest to stary zwyczaj powodowany utrzymywaniem pól wyrównanych na granicach bajtów. Chodziło o to, aby pola były wyrównane na granicach 4- lub 8-bajtowych, ponieważ jest to bardziej optymalne dla procesora (należy użyć języka programowania "C"). Pozwoliło to uniknąć zbędnego miejsca, gdy wartość liczby całkowitej lub zmiennoprzecinkowej wymagała wyrównania 4- lub 8-bajtowego (tak, aby pominięto niektóre bajty) lub niepotrzebnego narzutu, aby skopiować bajty z niewyrównanej przestrzeni do wyrównanej przestrzeni. Oczywiście, jak już zauważyłem, ta logika nie ma podstaw dla baz danych, ponieważ maksymalna długość nie ma wpływu na faktyczne przechowywanie na stronie.
Innym powodem, dla którego nie ma to znaczenia, jest to, że typ varchar
przechowuje jeden lub dwa bajty więcej niż długość. Baza danych zajmuje się konwersją z formatu fizycznego na stronie do formatu fizycznego w pamięci. Próba "optymalizacji" tego procesu to znacznie więcej wysiłku, niż jest to warte.
+1. Długość pola varchar() powinna mieć niewielką różnicę. –
interesujące ..czy znalazłeś namiary w dokumentacji mysql lub czy jest to zgadywana domysły? –
Właściwie wolę wybrać długość varcharu jako moc x równą 2, jest to bardziej intuicyjne dla Dev facetów. : / –