Вам не нужно настраивать параметры набора символов таким образом, чтобы получить желаемый результат. Они просто помогают БД делать разумные вещи с сортировкой и тому подобное.
Я подозреваю, что вы действительно получаете данные в формате UTF-8, но просто неправильно обрабатываете их. Прохождение UTF-8 в C - самая легкая вещь в мире. Получение правильной распечатки может быть более сложной задачей, но, конечно, это не проблема MySQL.
Исходя из того, что вы пометили этот пост, я предполагаю, что вы запускаете эту программу в Linux. Если это так, вы должны просто иметь возможность распечатать его на консоли (printf (), cout, что угодно), чтобы получить правильное представление, так как консоли Linux почти всегда по умолчанию используют UTF-8 в наши дни. Проверьте переменную среды LANG.
При работе с Unicode может быть полезно написать тестовые программы, которые получают очень небольшое количество данных, не относящихся к ASCII, - лучше всего один символ - выводить только это и перенаправлять вывод этой программы в файл. , Затем посмотрите на файл в шестнадцатеричном редакторе и сравните его, по крайней мере, с UCS-2LE, чтобы убедиться, что вы видите неправильную кодировку.
Я поддерживаю MySQL ++ и могу сказать вам, что MySQL ++ вполне естественно работает с UTF-8 в Linux, но мы не играем в какие-либо игры, чтобы заставить это сделать это. Я не понимаю, почему простой код C API не должен вести себя так же естественно. Вы можете попробовать собрать MySQL ++ в своей системе и запустить примеры, так как они включают тесты UTF-8. Запустите resetdb для настройки, затем simple1, чтобы показать данные UTF-8, которые resetdb поместил в тестовую базу данных. См. README-examples.txt в дистрибутиве для получения более подробной информации.
Я не говорю вам переключаться на MySQL ++, просто использую это в качестве известного рабочего теста. Как только вы заработаете, вы можете либо изменить эти примеры, чтобы они работали с вашей собственной БД, чтобы посмотреть, не сломается ли она тогда.