I tend to agree with Twan. If a field is going to contain a variety of lengths, then use varchar.
IF a column is always the same length, always, always, always, then regardless of how long, use char. Varchar carries a single bite overhead and if you will always fill all the characters every time, then you dont need the overhead. Examples of this are 2 digit state/province code, or 5 digit membership numbers etc.
There is no need for a varchar(1) - it makes no sense, either there is a value, length of 1 or not.
The other smaller values would depend mostly on your data and how its used. But if you have variable data, use a variable length, if you have fixed length then use fixed length.
Chris