(letto sopra, riassuntone qua se serve ad altri)
Esatto, la pagina in cui vengono inseriti i dati deve essere UTF-8. Così i dati inviati al server saranno UTF-8, e finiranno nel database in quel modo (attraverso probabilmente un sano escape), qualunque sia la codifica delle tabelle.
Quando li tiri fuori, non devi più convertirli (solitamente a meno di htmlspecialchars), ma devi assicurarti che la pagina che li mostra venga renderizzata come UTF-8. Puoi fare questo via <meta> tag nella pagina stessa
Codice HTML:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
oppure via php (prima di ogni altro output) con la funzione header(), così:
Codice PHP:
header('Content-Type: text/html; charset=utf-8');
La funzione header() è anche l'unico modo con cui puoi scegliere il charset se scrivi script php che risponda a chiamate javascript (xmlhttprequest, etc).