It sounds like all you are looking for is a generic storage using MySQL. Then your translation of _String to TEXT makes sense, but I would consider _Real as a DOUBLE column, depending on your precision requirements.
Additionally, I would probably separate the inner list:
{_String, {_String, _Real}, _Real}
into:
{_String, _String, _Real, _Real}
So that you would have four columns (TEXT, TEXT, DOUBLE, DOUBLE). You can translate back and forth with some patterns like:
{a_String, b_String, c_Real, d_Real} -> {a, {b, c}, d}
and
{a_String, {b_String, c_Real}, d_Real} -> {a, b, c, d}
Before and after import.
If you need to store MMA expressions, then the most portable way, I believe, is to store them as InputForm, as mentioned by FJRA in the comment to the question. To do so, you would need to do:
ToString[InputForm[expression]]
And then the reverse:
ToExpression[importedString,InputForm]
ToString[x, InputForm]will let you go back to MMA but it would be better to answer @tkott to get a better answer. – FJRA May 10 '12 at 13:13