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

LOAD DATA INFILE con caracteres especiales

Estas en el tema de LOAD DATA INFILE con caracteres especiales en el foro de Mysql en Foros del Web. Hola amigos Mi duda es simple, ¿cómo se insertan registros en mysql con LOAD DATA INFILE si llevan tildes, eñes y demás? El archivo es ...
  #1 (permalink)  
Antiguo 13/02/2009, 06:01
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Pregunta LOAD DATA INFILE con caracteres especiales

Hola amigos

Mi duda es simple, ¿cómo se insertan registros en mysql con LOAD DATA INFILE si llevan tildes, eñes y demás?

El archivo es un CSV.

Saludos.
  #2 (permalink)  
Antiguo 13/02/2009, 06:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

Igual que las que no llevan tildes ni eñes.
Por lo que veo tienes un problema de codificación, es decir, cuando guardas en un archivo csv el texto la codificación debe ser la misma que la de la base desde la que vas a importar. Es habitual que tengas una base con charset o codificación utf8 y que al importar te corte las palabras por donde aparece un acento o una eñe. Si ese es tu caso, cuando guardes el archivo csv, hazlo en codificación utf8. Lo podrás hacer con el bloc de notas o con un editor de texto. Luego importas y ya verás que el problema se acabó. La idea es que el archivo de texto que guardes tenga la misma codificación que la base de datos desde la que importas, sea la que sea.
  #3 (permalink)  
Antiguo 13/02/2009, 06:40
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Claaaro. Gracias jurena.

Pero, si quiero que se guarden las tildes así: 'RodrÃ*guez' porque en la web leo eso y muestro 'Rodríguez' ¿qué codificación debe tener?

Gracias.

Última edición por GatorV; 13/02/2009 a las 10:09
  #4 (permalink)  
Antiguo 13/02/2009, 08:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

frasko01,

no sé si te entiendo; creo entender que quieres guardar mal codificado un texto, tal vez porque tienes algo mal codificado y lo resuelves de algún modo. Lo primero que tendrías que decirnos es cómo te llega, con qué codificación y desde dónde exportas; lo segundo es qué codificación tiene tu base y que collation usas en tus tablas y campos; lo siguiente es si le indicas a tu servidor en qué codificación le envías la información y en qué codificación la devuelves (en MySQL solemos usar para eso SET NAMES...); otra información de interés es poder conocer en qué codificas los archivos html, php; qué metas usas y si pasas por GET alguna información. Parece mucho, pero no es tanto. Es importante saber todo esto para poder aconsejarte sobre lo que quieres o disuadirte de hacerlo.

Saludos
  #5 (permalink)  
Antiguo 13/02/2009, 09:05
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

El archivo es de excel, lo paso a CSV y lo guardo con charset utf8.

En la base de datos está todo codificado en utf8 y los archivos de la web también.

Cuando guardo algún registro desde una caja de texto, si lleva tildes, las guarda como te he mostrado antes (RodrÃ*guez) pero después en la web me los muestra bien (Rodríguez).

Esta forma de mostrar las tildes siempre me fucionó bien pero ahora que tengo que sacar los datos de un archivo excel no sé cómo.

Supongo que debo codificar el archivo CSV de manera que me genere los datos 'mal', no?

Quizá no lo estoy haciendo bien, como lo ves?

Gracias.
  #6 (permalink)  
Antiguo 13/02/2009, 09:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

Dices
Cita:
Cuando guardo algún registro desde una caja de texto, si lleva tildes, las guarda como te he mostrado antes (RodrÃ*guez)
Mira la codificación (cómo está guardado y qué meta tiene) del archivo php o html implicado en el que tienes el formulario donde se escribe Rodríguez. ¿Cómo pasas Rodríguez, por método POST o por método GET?

Última edición por jurena; 13/02/2009 a las 09:21
  #7 (permalink)  
Antiguo 13/02/2009, 09:25
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

Los datos suelo pasarlos por POST.

El archivo PHP tiente la siguiente meta:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Cuando detecta 'RodrÃ*guez' escribe 'Rodríguez'. Así siempre me ha funcionado bien.

Pero si en la base de datos escribo directamente 'Rodríguez', en la web me muestra 'Rodr?guez', ese es el problema.
  #8 (permalink)  
Antiguo 13/02/2009, 09:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

El problema es que no estás diciéndole al servidor que se lo mandas en utf8 y quieres que te lo devuelva en utf8. Para eso justo después de hacer la conexión con la base, escribes:
mysql_query ("SET NAMES 'utf8'");

y ya no te mostrará esos ?
pero entonces el problema será qué has hecho para que sin el set names... sacar bien el resultado. Comprueba esto que te digo.
  #9 (permalink)  
Antiguo 13/02/2009, 10:04
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

Lo he probado y nada.

También he probado con utf8_encode(), utf8_decode() pero de ninguna manera.

Es lo que dije antes:

Cita:
Iniciado por frasko01 Ver Mensaje
Cuando detecta 'RodrÃ*guez' escribe 'Rodríguez'. Así siempre me ha funcionado bien.

Pero si en la base de datos escribo directamente 'Rodríguez', en la web me muestra 'Rodr?guez', ese es el problema.
No se qué hacer. Empiezo a desesperarme

Gracias de todas formas.
  #10 (permalink)  
Antiguo 13/02/2009, 10:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

olvídate de utf_encode y utf_decode. Es posible que si lo estás utilizando, ese sea el problema, aunque ahora mismo no estoy seguro de nada de lo que te ocurre a ti.
  #11 (permalink)  
Antiguo 13/02/2009, 10:59
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

Cita:
Iniciado por jurena Ver Mensaje
olvídate de utf_encode y utf_decode. Es posible que si lo estás utilizando, ese sea el problema, aunque ahora mismo no estoy seguro de nada de lo que te ocurre a ti.
Eso solo lo probé como último recurso.

Normal que no estés seguro, no lo estoy ni yo
  #12 (permalink)  
Antiguo 13/02/2009, 11:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

Pero por eso no vamos a rendirnos.
Mira este enlace que te pongo y lee la aportación de krowork. Lo mismo ves allí la solución.
http://www.php-hispano.net/foros/PHP/33654
  #13 (permalink)  
Antiguo 13/02/2009, 11:44
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

Ese aporte es muy bueno pero no logro hacer lo que quiero.

El archivo CSV lo abro en excel y me muestra los acentos como quiero que se guarden en la bbdd (Ã*).

Pero al hacer el query los registros se insertan con sus correspondientes tildes.

Algo está fallando, igual es una tontería, pero me trae de cabeza.

Gracias. Qué haría yo sin ustedes?
  #14 (permalink)  
Antiguo 13/02/2009, 11:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

frasko01;
¿Cómo es el query? Lo haces con PHP puro, con PHPMyAdmin, ¿cómo? No pongas código php, sólo dinos cómo lo haces. Tal vez indicando en el load algo sobre la codificación puedas conseguir lo que quieres.
  #15 (permalink)  
Antiguo 13/02/2009, 12:00
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

Lo hago con PHP

$sql="LOAD DATA LOCAL INFILE '".$file."' REPLACE INTO TABLE empleados FIELDS TERMINATED BY ';'";
  #16 (permalink)  
Antiguo 13/02/2009, 12:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: LOAD DATA INFILE con caracteres especiales

¿y tras hacer la conexión a la base, antes de la consulta, tienes SET NAMES y la codificación...?
  #17 (permalink)  
Antiguo 13/02/2009, 12:06
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: LOAD DATA INFILE con caracteres especiales

El SET NAMES lo tenía pero viendo que no funcionaba lo quité.

La codificación está en utf8.

Gracias por todo.

No podré responder hasta mañana, de todos modos mañana seguiré intentándolo ( y preguntando ).

Muchas gracias de nuevo.
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 02:58.