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

Codificación de archivo

Estas en el tema de Codificación de archivo en el foro de Bases de Datos General en Foros del Web. Buen día foro Me ha llegado un archivo en formato txt con poco mas de 3 millones de registros para ser cargado a una tabla ...
  #1 (permalink)  
Antiguo 09/02/2010, 09:58
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
Codificación de archivo

Buen día foro

Me ha llegado un archivo en formato txt con poco mas de 3 millones de registros para ser cargado a una tabla en postgresql. El archivo se encuentra delimitado por comas para la separación de los campos y enter para terminación de lineas.

Algunos campos son nombres de estaciones climáticas y traen consigo tildes y Ñs.

La base de datos está en latin1 y si ingreso manualmente tildes y Ñs no tengo problema. Sin embargo, al cargar el archivo con la sentencia copy estos caracteres no son reconocidos.

Haciendo uso del gedit de opensuse, he guardado el archivo y aplicado la codificación western ISO-8859-1 (que corresponde a latin1) sin tener resultados satisfactorios.

He probado guardar el archivo como UTF8, windows-1252 sin éxito.

Posteo acá en el foro de base de datos en general, por que he hecho la prueba en una tabla mysql y se me presenta exactamente el mismo problema.

De no dar con una solución, supongo que tendré que tendré que hacer actualizaciones masivas de caracteres extraños con su correspondiente significado.

saludos y gracias
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #2 (permalink)  
Antiguo 09/02/2010, 11:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

huesos58,
pega en el post una parte del archivo que tenga eñes y trataré de filtrarlo a MySQL haciendo alguna prueba. O escríbeme por correo del foro y te daré mi correo personal para que me lo envíes.

Alguna aclaración:
que tenga eñes y acentos no quiere decir nada en principio. Puede ser que esté codificado en UTF8 en el propio archivo txt. En ese caso tendrías que copiar todo, crear una archivo de texto con codificación ANSI y pegar en el nuevo, y luego importar desde MySQL.

Última edición por jurena; 09/02/2010 a las 11:41
  #3 (permalink)  
Antiguo 09/02/2010, 12:03
Avatar de Valery-Net  
Fecha de Ingreso: agosto-2008
Mensajes: 694
Antigüedad: 16 años, 2 meses
Puntos: 12
Respuesta: Codificación de archivo

huesitos me ha paso eso en alguna ocasión, como el archivo ha sido pequeño lo he abierto con Notepad y lo grabo con otro nombre con codificación ansi, de esa forma si la base de datos tiene codificación en latin1 no tendrá problemas, inténtalo y me cuentas
  #4 (permalink)  
Antiguo 09/02/2010, 12:21
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: Codificación de archivo

Jurena... ya te he enviado el archivo a tu mail.

Valery.... tuve que buscar un editor mas potente que el notepad que me permitiiera mas opciones de codificación, ya que nii con ANSI, unicode y UTF8 (codificaciones soportadas por el notepad) he tenido éxito.

Los archivos son importados, pero los caracteres me los pasa mal.

Les agradezco mucho su ayuda.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 09/02/2010, 14:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

huesos,
he probado en consola con MySQL 5.027, que es la versión que manejo. El archivo está como me lo enviaste dentro de la carpeta de la base que abro, y que he llamado huesos. La base se ha creado con latin_spanish_ci como cotejamiento. El archivo clima.txt tiene codificación ANSI. Me he limitado a escribir en consola tras abrir la base mediante use huesos;
he escrito luego esto:
LOAD DATA INFILE "clima.txt"
INTO TABLE clima
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';

y ha importado perfectamente los datos. No he tenido ni que especificar el character set en el LOAD, puesto que es el mismo.

¿No habrá ocurrido que la base esté codificada en utf8? Crea una nueva base en LATIN1, con sus tablas en esa misma codificación y trata de importar.
  #6 (permalink)  
Antiguo 09/02/2010, 15:42
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: Codificación de archivo

Jurena tengo la misma versión que vos..

según entiendo, creo una nueva base de datos con cotejamiento latin1_spanish_ci al igual que la tabla. El archivo lo he guardado en formato ANSI como me dices.

Mira el proceso y dime que pude haber hecho mal.

Código MySQL:
Ver original
  1. mysql> create database huesos character set latin1 collate latin1_spanish_ci;
  2. Query OK, 1 row affected (0.00 sec)
  3.  
  4. mysql> use huesos;
  5. Database changed
  6. mysql> CREATE TABLE clima
  7.     -> (
  8.     ->   estacion text,
  9.     ->   iestacion text,
  10.     ->   fano integer,
  11.     ->   fmes integer,
  12.     ->   fdia integer,
  13.     ->   prec float,
  14.     ->   bsol float,
  15.     ->   tmax float,
  16.     ->   tmin float,
  17.     ->   tmed float,
  18.     ->   hrel float
  19.     -> ) engine=innodb charset=latin1 collate=latin1_spanish_ci;
  20. Query OK, 0 rows affected (0.02 sec)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 09/02/2010 a las 15:52
  #7 (permalink)  
Antiguo 09/02/2010, 15:55
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: Codificación de archivo

Código MySQL:
Ver original
  1. mysql> select distinct estacion from clima;
  2. +-----------------------+
  3. | estacion              |
  4. +-----------------------+
  5. | Mesitas de Santa InÚs |
  6. | Chapet¾n              |
  7. | La Trinidad           |
  8. | Santa Helena          |
  9. +-----------------------+
  10. 4 rows in set (0.25 sec)
  11.  
  12. mysql> select version();
  13. +---------------------+
  14. | version()           |
  15. +---------------------+
  16. | 5.0.27-community-nt |
  17. +---------------------+
  18. 1 row in set (0.01 sec)
  19.  
  20. mysql>

A mi sigue sin funcionarme.



Gracias por tu valioso tiempo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 09/02/2010, 16:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

He copiado tu estructura, he importado desde consola sin más, y ha cargado todo perfectamente.

consulta SQL:SELECT DISTINCT estacion
FROM clima
LIMIT 0 , 30
[ Editar ] [ Explicar el SQL ] [ Crear código PHP ] [ Actualizar ]

Operaciones sobre los resultados de la consultaVista de impresión Previsualización para imprimir (documento completo) Exportar
filas empezando de
en modo horizontal horizontal (encabezados rotados) vertical y repetir los encabezados cada celdas
estacion
Mesitas de Santa Inés
Chapetón
La Trinidad
Santa Helena

No nos has mostrado cómo tienes todo lo de codificación en tu Apache.

No se me ocurre qué pueda ser, salvo que tenga algo que ver con la codificación del navegador o quizás mejor con la configuración regional de tu ordenador. Si tienes apuro, envíame todo el archivo de texto y yo lo importaré y trataré de hacerte llegar la base de algún modo...
  #9 (permalink)  
Antiguo 09/02/2010, 20:44
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: Codificación de archivo

Jurena... cada vez entiendo menos esto

Aunque desde consola me muestre mal los datos, desde asp.net con el IIS con la codificación latin1 me muestra correctamente las estaciones.

Con esto quedo mas tranquilo... por que realmente lo que necesito en un futuro es mostrar correctamente las estaciones en el sistema.

saludos y gracias de nuevo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 10/02/2010, 01:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

huesos52,
¿imagino que estás trabajando en localhost, o lo haces con un servidor externo?
  #11 (permalink)  
Antiguo 10/02/2010, 07:15
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: Codificación de archivo

Por ahora trabajo en localhost.

Sin embargo... hay algo que no me queda claro..

Cita:
He copiado tu estructura, he importado desde consola sin más, y ha cargado todo perfectamente.

consulta SQL:SELECT DISTINCT estacion
FROM clima
LIMIT 0 , 30
[ Editar ] [ Explicar el SQL ] [ Crear código PHP ] [ Actualizar ]

Operaciones sobre los resultados de la consultaVista de impresión Previsualización para imprimir (documento completo) Exportar
filas empezando de
en modo horizontal horizontal (encabezados rotados) vertical y repetir los encabezados cada celdas
estacion
Mesitas de Santa Inés
Chapetón
La Trinidad
Santa Helena

No nos has mostrado cómo tienes todo lo de codificación en tu Apache.

No se me ocurre qué pueda ser, salvo que tenga algo que ver con la codificación del navegador o quizás mejor con la configuración regional de tu ordenador. Si tienes apuro, envíame todo el archivo de texto y yo lo importaré y trataré de hacerte llegar la base de algún modo...
La importación la hiciste tal cual como yo puse desde consola. Y cuando consultas desde consola los datos son importados correctamente?
La cosa es ique cuando sigo los pasos que te digo, los datos no me cargan correctamente en consola. Lo cual es raro, por que según la teoría si tanto el archivo como la base de datos manejan la misma codificación, no debería presentar problemas.

La cosa acá es que llamese phpmyadmin o pgadmin, cada software maneja su propia codificación que creo es diferente a la configuración de la base de datos como tal. Desde pgadmin me muestra el registro vacío, desde consola me lo muestra malo, pero desde IIS me lo muestra correctamente.

Con el fin de no quedarme en una misma tarea y sacar el trabajo lo mas rápido posible, he optado por identificar los caracteres que se reemplazan por las vocales con tilde y las Ñs y hacer un replace del campo.

Cuando tenga un poco mas de tiempo, seguiré mirando el tema.

Mil gracias jurena por tu tiempo y dedicaciónn.
Mil gracias también para ti valery.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 10/02/2010 a las 07:21
  #12 (permalink)  
Antiguo 10/02/2010, 08:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

El archivo lo tenía dentro de la carpeta de MySQL, y dentro de la carpeta que daba nombre a la base huesos, y la sintaxis fue;
use huesos;

y luego
LOAD DATA INFILE "clima.txt"
INTO TABLE clima
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';

y ya está. No hizo ningún skip y todo entró perfectamente en la tabla.

Pero tienes razón en que algo ocurre, pues al mostrarlo por la consola salen esos signos raros de los que hablabas, pero eso no estoy seguro de que se deba a un problema de codificación, aunque pudiera parecer que sí, sino a la fuente usada por la consola. He probado en otras bases mías y el resultado es el mismo. Prueba tú mostrando otras tablas a ver si ocurre lo mismo, tablas cuyos datos no hayan sido importados.

Luego probaré sobre datos ingresados directamente por consola.
  #13 (permalink)  
Antiguo 10/02/2010, 09:42
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: Codificación de archivo

Lo raro jurena... es que si yo inserto manualmente la información, en consola se me muestra correctamente.
Miralo aca

Código MySQL:
Ver original
  1. mysql> select distinct estacion from clima;
  2. +-----------------------+
  3. | estacion              |
  4. +-----------------------+
  5. | Mesitas de Santa InÚs |
  6. | Chapet¾n              |
  7. | La Trinidad           |
  8. | Santa Helena          |
  9. +-----------------------+
  10. 4 rows in set (0.47 sec)
  11.  
  12. mysql> insert into clima (estacion) values('chaperrón santa inés');
  13. Query OK, 1 row affected (0.02 sec)
  14.  
  15. mysql> select distinct estacion from clima;
  16. +-----------------------+
  17. | estacion              |
  18. +-----------------------+
  19. | Mesitas de Santa InÚs |
  20. | Chapet¾n              |
  21. | La Trinidad           |
  22. | Santa Helena          |
  23. | chaperrón santa inés  |
  24. +-----------------------+
  25. 5 rows in set (0.25 sec)
  26.  
  27. mysql>

Cuando hago el insert desde consola con tildes, la consola me lo acepta bien y me lo muestra bien. Al igual que me los muestra bien desde el server.

Me inclino por lo que dices

Cita:
Pero tienes razón en que algo ocurre, pues al mostrarlo por la consola salen esos signos raros de los que hablabas, pero eso no estoy seguro de que se deba a un problema de codificación, aunque pudiera parecer que sí, sino a la fuente usada por la consola.
Pero sigo pensando que es problema de la codificación del archivo.

Claro está, que desde el servidor Web ya me los muestra bien, osea que no debo preocuparme en un futuro por este problema. El hecho de que los muestre bonitos para mi no tiene ningún sentido, pero si tuviera problemas para mostrarselos a los usuarios, ese si sería un problema.

Gracias nuevamente
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #14 (permalink)  
Antiguo 11/02/2010, 16:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

huesos52,
sí que parece un problema de codificación y no de la fuente empleada para mostrar en consola. Como decías, si incluyes el dato por consola usando la codificación pertinente tras aplicar el set names latin1, el texto se ve bien. Lo que no entiendo es por qué si el archivo de texto está codificado en latin1 y, antes de hacer la importación, aplicamos set names latin1, no ocurre lo mismo que si insertamos algo desde consola. ¿Qué diferencia el load del insert...? He intentado aplicar CHARACTER SET latin1 tras el nombre de la tabla en el LOAD, pero tampoco parece funcionarme.
  #15 (permalink)  
Antiguo 11/02/2010, 21:27
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: Codificación de archivo

Creo que en varias ocasiones he mostrado mi negativa al tratar estos temas de codificación. Al parecer se da de igual forma en postgres y en mysql.

Hoy hice ciertas pruebas que me dejan desconcertado.
Desde la consola de postgres inserto palabras con acento. Si desde la consola las consulto, me aparecen perfectamente. Si hago busquedas haciendo uso de like e incluyo las tildes desde consola me los muestra perfecto.

Voy a pgadmin y hago la consulta con tilde y no me encuentra resultados. Desde pgadmin las tildes me las reemplaza por caracteres extraños en la busqueda.

Hago una inserción desde pg_admin de palabras con tilde y desde pgadmin se ve correctamente. Voy a la consola y me muestra caracteres extraños. (Exactamente los mismos que cuando importo el archivo)

He borrado nuevamente la tabla que cargué del archivo y la he vuelto a montar como uds me han recomendado. La consulto con el pgadmin y me aparece perfecta. Pero la consulto desde consola y me salen los caracteres.

Por todo lo que me dices que haz hecho entre phpmyadmin y la consola de mysql parece que tienes los mismos sintomas no?

Por ahora, optaré por dejar la tabla tal cual la cargué ya que no me presenta errores al ser consultada por los usuarios y tendré que dejar de usar la consola que tanto me gusta.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #16 (permalink)  
Antiguo 13/02/2010, 03:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Codificación de archivo

Yo creo que para resolver esa parte de la consola, quizás deberíamos tocar lo indicado aquí:
http://www.s3v-i.net/bases-de-datos/...t-y-collation/
Copio la parte:
Cita:
Nosotros definiremos latin1(iso-8859-1) para el charset y latin1_spanish_ci para collation.

Editamos el archivo de configuración de MySQL que se suele llamar my.ini o my.cnf dependiendo del sistema operativo y añadimos los siguientes valores después de la sección [mysqld]:

character-set-server=latin1
collation-server=latin1_spanish_ci
default-character-set=latin1
default-collation=latin_spanish_ci

A continuación reiniciamos el servidor y así se habrán establecido los nuevos valores por defecto.

Para asegurarnos, especificamos los charsets en la configuración de PHP y Apache.

Editamos php.ini y modificamos la línea:

default_charset="iso-8859-1"

Editamos httpd.conf y modificamos la línea. Si comentamos la línea tomará el charset por defecto del navegador:

AddDefaultCharset ISO-8859-1
No lo he probado. Pero si funcionara tendrías que estar haciendo eso en tu ordenador cada vez que cambiaras de charset. Y en tu ordenador puedes, pero en el Servidor no creo que te dejaran.

Última edición por jurena; 13/02/2010 a las 05:48
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 14:40.