As Ben says, the KB's workarounds are all awful. After trying them all I wrote my own KB article documenting the SQL and CSV Importer options in gruesome detail.
Another workaround covered is the Copy Custom Field Values built-in script in the ScriptRunner plugin. Give it a filter of affected issues, an old and new field, and it transfers values from old to new.
I can somewhat understand what Atlassian didn't want to touch this. Think of all the places a custom field could be referenced: filters, gadgets, Agile card layouts, workflow conditions/validators/postfunctions, Groovy scripts, and configuration of random plugins. Now consider: which of these custom field 'consumers' care about the field type and cardinality? Clearly many will. JIRA's core is unable to guarantee that changing a field type won't break stuff.
Just want to bump this again to say it is really frustrating to have no ability to change any custom field types. For example, we had a number field and found it to be a little too limiting and would like to move to a text field. So I am going through and bulk editing, searching number by number, and updating a few issues at a time to manually put value of the old number field in the new text field.