Yo dudo que sea problema de codificación.
Si la salida es SáNchez es por que realmente reconoce las tildes la base de datos.
Yo veo mas bien que es un problema de la función initcap,lower y upper para convertir tildes.
(Incluso hay problemas en mysql para convertir tildes con lower y upper)
Puedes aplicar un truco, pero eso te escondería las tildes que tengas en el campo.
Código sql:
Ver originalSELECT initcap(translate(cad,'áéíóúÁÉÍÓÚ','aeiouAEIOU')) FROM tabla;
De esta forma te imprime
Sanchez así el campo original esté con tilde.
Un saludo.