Oh yes, I forgot than an empty varchar takes no space (or so) in the DB, so it'd only be used when deleting the account...
Well, a varchar consumes n+length bytes where n is the length of it, so a 5 byte varchar consumes (1 to hold the length and 5 for content =) 6 bytes. An empty varchar will still contain that one byte to reflect on the fact that you're not keeping any content and thus its length is 0.
The bigger problem I have is the amount of rewriting that will occur on deleting an account, because it will force every row where that user has impacted to be rewritten - which could cause a lot of data change.
What I'd probably do in that case is make it so all account deletions have to be approved by the admin, rather than making it optional, because of the performance impact that's attached (the account's frozen out to the user anyhow at that point unless they want to undelete it), and for spammers it's mostly irrelevant because in a lot of cases the post will be removed as well...
id_modified_by or something should have a default of 0 or maybe null, I don't know which is likely to take the least space...
Use 0. NULL is a special case and requires an extra bit per column on top of whatever data requirements the column has itself. If you don't have any need for the NULL value, don't use it and save that bit per column as it means that you spend less time fighting with bit shifting to get anywhere.