I specifically said "facebook" because you are immediately talking about a user table with about 5 million rows in it.
If you try loading up that colors table with all your users and all your colors, then performance is going to suck, unless you make indexes for all the queries. Just think, that color table of yours is going to have about 15 million rows if you have 5 million users. It's a terrible waste of resources for a table that has very little actual information in it.
After you're done making all the indexes, you will find that INSERT performance now sucks, because you have to calculate all those indexes every time you do an insert.
If you limit the number of colors available, the users will complain. If you don't limit the number of colors, then the size of that table will grow and the database will have to re-index it every time it changes.
See now we have introduced complexity and indexes and performance issues and all we really wanted was a simple list of colors.
If you use JSON then you get the entire user's profile with one indexing operation and performance will be great.
Indexing a table with millions of rows is hard work for the database. There are disk fetches and cache misses and it's generally not a fast operation. You don't want to do it any more than you have to.
You don't need to write a silly loop to extract all the colors from the sql table and plug them into the user object.
The kind of code you are talking about is always rife with bugs because it's hard to do right. It's SO easy to make a typo that's hard to catch. You are whittling down the square pegs to fit them into round holes. The whole reason companies write ORM frameworks is because the result-set fetching loops required to support your SQL queries, they are bug magnets.
There's an old quote from somewhere that I like to pull out at times like this:
"the most reliable and bug free parts of any system are the ones that aren't there"
again why clutter up your app with bug-prone code when you can just call JSON.decode()?
and you can also ask facebook if they run SQL queries inside of their pages, they will say "heck, no!"
If you want to do fast lookups on users based on something like favorite colors, you use "bitmap indexes" and SQL is of limited help to you.
What you do is take a bigint field and use one bit for each color. If you have 128 bit bigints then you have more colors than Crayola. Then you can index this field and you can ask "what people have blue and green as their favorite colors" and my query will run a heck of a lot faster than yours will. Of course this solution fixes the colors, and no user-defined colors are allowed, but the performance is excellent.
If you don't like JSON then you can use google protocol buffers. They're blazing fast.