D'accord! Voici donc ce qui a dû se passer :
interface utilisateur (UTF-8) → contrôleur (UTF-8) → modèle (ISO-8859-1) → Base de données (UTF-8, mais il reçoit ISO-8859-1)
Les champs ont donc été configurés pour utiliser l'encodage UTF-8, mais ils reçoivent des données encodées ISO-8859-1. Je voulais convertir les données mal encodées en UTF-8.
Comme les données étaient en fait encodées en ISO-8559-1, j'ai résolu mon problème avec le petit "hack" MySQL suivant :
UPDATE `table` SET `column` = convert(cast(convert(`column` using latin1) as binary) using utf8)
Courtoisie ABS sur StackOverflow.
Merci d'avoir pris le temps de vous pencher sur mon problème, les gars ! :)