Instead of returning implementation details and keeing the old API weirdness, let's provide a clear implementation in IMessageMetadata. Now, for SQL_BLOB (subtype TEXT), getScale() returns a charset. For SQL_VARYING, getSubType() returns a charset, getCharSet() returns zero (accordingly to user reports). This makes the interface hardly usable and plays against the long-term success of the new API.
The fact that the old API emulation is stacked on top of the new API (thus possibly requiring a conversion between proper and legacy property values) could be a problem here, but it must be solved.