Я не использую Oracle ODBC в Windows, но я использую различные драйверы Oracle ODBC в ряде операционных систем UNIX.Вы не говорите, какой драйвер ODBC вы используете, но уверены, что он имеет атрибут подключения charset = utf8?Драйвер Oracle ODBC для Linux, похоже, не имеет этого атрибута.Кроме того, я не слышал о «set names utf8» для Oracle;не правда ли, что это mysql?
В UNIX, чтобы получить данные UTF-8 от Oracle, вы устанавливаете для переменной среды NLS_LANG что-то вроде AMERICAN_AMERICA.AL32UTF8, которая сообщает клиенту Oracle, как вам нужны данные.
Кроме того, ODBC не очень хорошо справляется с UTF-8 (объяснение здесь слишком длинное).Драйверы ODBC в Windows используют так называемые широкие API-интерфейсы SQLxxxW, которые принимают и возвращают SQLWCHAR, которые имеют размер 2 байта и обычно закодированы в UCS-2.Драйвер, совместимый с Юникодом в Windows, должен обеспечивать широкие API-интерфейсы SQLxxxW, а UTF-8 в него не входит.
Однако, как я уже сказал, я не использую Oracle в Windows, но некоторые из перечисленных выше могут помочь вам.