Maintaining a column for each datatype
I would probably tackle it like this:


The database would have a few columns:


id
label
data (of some type, say, varchar for now)

The Wrapper class would be used to store/retrieve data from the database:


Responsible for conversion (serialization) from whatever type is necessary to the backend data store



The Wrapper class could have some sanity checks so that you couldn't ask for a int if it really was a string, etc etc.

This probably doesn't satisfy your "keeping things as small as possible" requirement, but disk is cheep.

You could create an object and basically serialize that and store the serialized version in the database.  You could then deserialize that when you needed to.