Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/06/2009, 23:54
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Problemas con INITCAP y los acentos y tildes

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 original
  1. SELECT CONVERT(INITCAP(CONVERT(campo,'WE8ISO8859P1','UTF8')),'UTF8','WE8ISO8859P1')

Última edición por jurena; 28/06/2009 a las 03:35