Le impostazioni di connessione MySQL potrebbero essere in errore qui. Esegui questo comando MySQL quando ti connetti al database da PHP, prima di eseguire qualsiasi altro comando SQL:
SET names 'utf8';
Questo dovrebbe impostare la codifica della connessione su UTF-8. Come stai dicendo, la pagina e il database sono già in UTF-8 (questo dovrebbe anche significare che la pagina invia Content-Type: text/html; charset=utf-8
); la connessione stessa può accidentalmente avere una codifica diversa per impostazione predefinita :(