No me expliqué bien, quería decir exactamente eso, que es un problema de usar esa función, pero con utf8, y sobre todo con vocales acentuadas que no se guardan igual en utf8. La función reconoce la vocal acentuada, pero no el byte de más propio de UTF8 e interpreta la palabra como dos palabras: de ahi que acentúe la N posterior, como si se tratase de una segunda palabra que empieza ahí. El truco es cambiar antes a otra codificación con la que la función no tenga ese problema (suele ser ISO-8859-1); luego se le aplica la función, y posteriormente se convierte de ISO-8859-1 a utf8, de nuevo. En MySQL este proceso suele funcionar y de hecho hay numerosas funciones en PHP para realizar el proceso, por ej. strtoupper_utf8, una función no nativa, sino aportada por los colaboradores y que hace lo mismo que strtoupper, pero en codificación utf8, y que consiste en decodificar, usar la función strtoupper y luego codificar de nuevo a utf8.
Imaginemos que tiene SÁNCHEZ en el campo llamado campo, en codificación utf8, yo probaría algo así. Acabo de inventármelo y no he usado nunca Oracle, pero me parece que la lógica es la correcta. Los resultados me los diréis los que trabajáis con Oracle.
Código sql:
Ver originalSELECT CONVERT(INITCAP(CONVERT(campo,'WE8ISO8859P1','UTF8')),'UTF8','WE8ISO8859P1')