Pengaturan koneksi MySQL mungkin salah di sini. Jalankan perintah MySQL ini saat Anda terhubung ke database dari PHP, sebelum Anda menjalankan perintah SQL lainnya:
SET names 'utf8';
Ini harus mengatur penyandian koneksi ke UTF-8. Seperti yang Anda katakan, halaman dan database sudah dalam UTF-8 (itu juga berarti halaman mengirim Content-Type: text/html; charset=utf-8
); koneksi itu sendiri secara tidak sengaja dapat memiliki penyandian yang berbeda secara default :(