Did you read what
htmlspecialchars does?
There's no point in doing this for storage. If you want what comes out to be HTML, htmlspecialchars takes special characters (to HTML) and converts them to escaped sequences so they display as plaintext. That is entirely the point of the function.
You don't need to do any conversion really. But a meta language would be preferable. It's generally a bad idea to allow an author to save raw HTML to a field that will be rendered later, it's a huge security hole.
What you should do, more specifically, if you want HTML to be permitted, is to permit only a subset of HTML. I have a bulletin board created for internal use only that does this because I didn't care to make some kind of BB code and because the WYSIWYG editor I used created HTML output by default and I didn't want to tweak that.
I used the function
strip_tags which is nice and simple. That's a lie really because what I used mimicked the way strip_tags works by parsing the data and also stripping unwanted attributes from tags (unweildy style attributes, javascript things, etc). But this is a simple way to quickly implement that functionality.
Alternatively, with what you've got, simply calling
html_entity_decode on the values you get back from your MySQL queries should give you the HTML you want.