jeśli wprowadzone dane będą zawsze 20 znaków, to dlaczego nie rozważyć użycia char(20) . użycie varchar(20) użyje 20 bajtów do przechowywania znaku i 1 bajtu do przechowywania długości. więc jeśli jest 1 milion rekordów, 1 milion bajtów zostanie zmarnowanych.
jeśli chodzi o prędkość między varchar(20) i varchar(255), to nie sądzę, aby wybranie jednego z nich mogło być bardzo trudne, oba będą używać 21 bajtów, nie widzę żadnych znaczących korzyści ani strat w wydajności jednego nad drugim.