Tomás, mirá donde nos venimos a encontrar!
Bueno, el problema es por una diferencia de encoding entre apache y mysql y hasta posiblemente tu navegador, es todo un quincho. Lo más sencillo que podés hacer es transformar todos los caracteres especiales a su equivalente html con la función htmlentities() antes de guardarlos a base de datos, por ejemplo:
Código PHP:
$texto = htmlentities("este texto es una confusión");
quedaría como "este texto es una confusión" y no va a tener problemas para ser guardado en la base de datos.
Saludos!