I have a basic product table in my database

The table records most of the value of a product common to every product like the price, mrp, name, sku etc.
Now every product has a few different attributes not applicable to each product. A shirt has size and colors, a monitor or cell phone has different display resolution, a book has ISBN and an author name so on and so forth
I need to have these attributes as well. Can anyone please give me a hint on how it can be done.
I have gone through a few question on stackoverflow and google but could not figure out how to do it right or else I wouldn't risk myself being down voted on stackoverflow.
What I usually do, despite not being the best option, is to define a Varchar field called attributes which is a json with the data I want.
Of course, this is only useful if you are accessing data from a programming language. Keep in mind that this way you won't be able to make joins on those attributes.
Another more database-oriented possibility is to define a item type, then for each type define an attributes table. For example T-Shirts are type 0 then you have something like 0_attributes (or t_shirt_attributes).
A major disadvantage is that you won't be able to retrieve every item and its attributes in a single query.