Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problemas con INITCAP y los acentos y tildes

Estas en el tema de Problemas con INITCAP y los acentos y tildes en el foro de Bases de Datos General en Foros del Web. Hola: En mi base de datos al poner initcap(cad) cuando aparece por ejemplo SÁNCHEZ lo pone como SáNchez ¿alguien me podria decir por k? estoy ...
  #1 (permalink)  
Antiguo 26/06/2009, 12:43
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años, 6 meses
Puntos: 0
Problemas con INITCAP y los acentos y tildes

Hola:

En mi base de datos al poner initcap(cad) cuando aparece por ejemplo SÁNCHEZ lo pone como SáNchez ¿alguien me podria decir por k? estoy utulizando pl/sql de oracle 10g

Saludos
  #2 (permalink)  
Antiguo 27/06/2009, 01:00
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

quizás porque estás usando esa función con una codificación utf8. ¿Es eso? Pregunta en el foro de oracle. Allí te lo solucionarán rápido. Me imagino que si haces un convert de utf8 a iso-88591 antes de aplicarle el INITCAP, y luego al resultado de aplicar esa función vuelves a convertirlo en utf8, tendrás una solución (algo parecido hacemos en MySQL), pero creo que lo mejor es que preguntes en el foro de ORACLE.
http://www.forosdelweb.com/f100/

Última edición por jurena; 27/06/2009 a las 01:33
  #3 (permalink)  
Antiguo 27/06/2009, 11:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problemas con INITCAP y los acentos y tildes

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 original
  1. SELECT initcap(translate(cad,'áéíóúÁÉÍÓÚ','aeiouAEIOU')) FROM tabla;

De esta forma te imprime Sanchez así el campo original esté con tilde.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 27/06/2009, 23:54
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:40.