zavisi od karakter seta, varchar ima neki "header" koji je 1-10 bajtova zavisi od mnogo cega koji ne zavisi od sadrzaja polja i imas "podatak" koji se cuva a koji zavisi od karakter seta, ako je latin1 onda svaki karakter zauzima jedan bajt, ako je utf8 onda svaki karakter zauzima 3 bajta etc...
ako uzmes na primer da je polje tipa char(200) to polje za podatak (header zaboravi) uvek trosi 200 karaktera ... i ako u njega upises "aa" i ako u njega upises "aaaaaaaaaaaaaaaaaaaa". ono sto je dobro kod takvog polja je ako su "sva" polja u tabeli "fixne duzine" onda je i slog fixne duzine te se 1000 slog u tabeli nalazi lako (nalazi sa na poziciji 1000*velicina sloga) dok ako je slog "varijabilne duzine" kao u slucaju kada je varchar(200) onda se 1000 slog nalazi tako sto se ili jure pointeri na njega (iz indexa) ili tako sto se trci kroz slogove da bi se doslo do njega.... sve u svemu, matematika nalazenja sloga postaje kompleksnija tako da ako imas slog fixne duze neke operacije sa tabelom su brze dok ako imas slog varijabilne duzine tabela moze da zauzima mnogo manje mesta (i samim tim sve bude brze zato sto mozes da iskesiras veci deo tabele)... nalazenje optimuma izmedju char() i varchar() zahteva mnogo vise znanja i iskustva nego sto ja mogu da prenesom jednim odgovorom na forumu ... ali mislim da imas dovoljno informacija da svatis sustinu razlike