Благодаря @chooban я узнал, что сеанс соединения использует latin1 вместо utf8. Вот два найденных решения:
SET NAMES utf8
, чтобы изменить набор символов соединения. CharSet=utf8
в строке DSN. Я не смог запустить SET NAMES
через ODBC. Этот вопрос указал мне в правильном направлении.