'password' must be char (40) if you use SHA1 hashes. This may have binary sorting if you are sure that hash cases are always the same. This gives you better performance. If you do not, use latin1, but do not use utf8.
'email' ... use 255, you cannot know how long the email address will be displayed.
For a username, I would use only what has a maximum username length. 20 or 30 would probably be good.
If you have an index in the character field (especially if it is part of f PK), the length is very carefully chosen because longer indexes can significantly reduce performance (and increase memory usage).
In addition, if you use the UTF8 char field in the index, you should know that MySQL reserves 3 times as many bytes, that the actual field character length is prepared for the worst case (UTF8 can store certain characters for 3 bytes). It can also cause out of memory.
source share