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

problema de encoding dependiendo de la entrada, trato de entender...

Estas en el tema de problema de encoding dependiendo de la entrada, trato de entender... en el foro de Mysql en Foros del Web. Hola a todos Este es un post mas bien para tratar de entender el porque del problema. El problema es bastante tipico, caracteres extraños aparecen ...
  #1 (permalink)  
Antiguo 03/04/2008, 05:02
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
problema de encoding dependiendo de la entrada, trato de entender...

Hola a todos

Este es un post mas bien para tratar de entender el porque del problema.

El problema es bastante tipico, caracteres extraños aparecen al introducir datos en la tabla. Al principio los datos estaban en latin1_sweedish_ci, esto es el collation de la tabal, asi que el charset vendria a ser latin1 si no me equivoco...

habia problemas con las e acentuadas y demas, asi que probe a cambiar, de primeras el charset de la tabla a utf8 , introduje un par de valores y parecia ir bien.

aun asi hize un SHOW VARIABLES y vi

character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection utf8_unicode_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci

de aqui presupongo importante el set_server y set_database...que estan los dos en latin1, pero com de momento al cambiarlo en la tabla me iba bien no quise hacerle mucho caso.

el caso es que mientras la bd reciba una entrada directa, a traves de la interfaz mysql de phpmyadmin o similares no tiene problema y almacena los caracteres correctamente...

Pero yo importo los datos de ficheros xml, geoRss mediante un script php... y aqui es donde aparecen otra vez los caracteres raros...

Me gustaria comprender porque ocurre esto, si alguien sabe la diferencia entre el charset de la tabla y el charset de la base de datos... en que se diferencian y si pueden ocasionar conflictos entre ellos...

voy a probar cambiando el charset de la base de datos, pero aunque se arreglara me gustaria saber el porque y no encuentro demasiada informacion al respecto...

Un saludo y gracias
  #2 (permalink)  
Antiguo 03/04/2008, 09:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: problema de encoding dependiendo de la entrada, trato de entender...

Te escribo como usuario, no como técnico, pero sí con cierta experiencia en UTF-8 con PHP y MySQL (tengo que escribir textos en griego antiguo, ordenarlos, etc.).
El charset de la base, del servidor MySQL, es el conjunto de caracteres, concretamente UNICODE (en sus distintas familias, como es UTF-8), aunque pueden ser otros, claro, como ISO-8859-1; según creo, las tablas y campos lo que tienen es collation, en realidad se selecciona una parte del conjunto de caracteres con reglas específicas para ordenar, comparar datos, etc. Un ejemplo: tú tienes la base en unicode UTF-8, y si no especificas la colación para las tablas y campos, MySQL pondrá el grupo de caracteres por defecto latin... lo que sea (los terminados en ci indican case insensitive, es decir, que no distinguen entre mayúsculas, minúsculas, acentos, etc., algo que puede ser útil para determinadas consultas), pero el charset sigue siendo UTF-8 y sólo a efectos de ordenación, comparación de datos, etc., funciona la colación.
Si tienes bien configurado el charset de la base y collations apropiadas de tablas y campos, por lo que se refiere a la base está todo hecho, pero recuerda que tienes un Apache, el Navegador, el programa php y los documentos .html, .php etc.
Debes hacer que la información llegue a través de Apache en el charset utf-8, pues es Apache quien le indica al navegador la codificación y por defecto le indica ISO-8859-1; la información debe ser procesada con PHP en el charset UTF-8, y que sea mostrada en archivos con codificación UTF-8 (me refiero a los archivos con terminación html, php, etc.). Piensa que el Defaultcharset de Apache no es utf-8, y tampoco el de PHP.
Por tanto, te conviene vigilar varias cosas si no quieres volverte loco.
Te aconsejo que le eches un vistazo a este post con información concreta y alguna recomendación
http://www.php-hispano.net/foros/MySQL/26396
y sobre todo a este otro (está en francés), pues recoge todo o casi todo lo que puede ocurrirte si trabajas con PHP y MySQL
http://electron-libre.fassnet.net/utf8.php
Yo te diré que con algunos truquillos recogidos en el primer enlace resolví la mayor parte de mis problemas (codificación UTF-8 de la base, colación apropiada de tablas y campos;
codificación UTF-8 de los documentos html y PHP, usando además metatags para indicar el charset en los archivos html; codificación utf-8 por defecto en PHP; y para evitar cualquier problema en la conexión que se establece entre la base de datos y el PHP mediante Apache usar la fórmula cuasi mágica en PHP mysql_query ("SET NAMES 'utf8'"); tras hacer la conexión a la base.
Con eso estaría casi todo, aunque hay que tener en cuenta que muchas funciones de PHP no trabajan con UTF-8 y alguna otra cosilla.
Espero no haber dicho muchas tonterías, pero así lo he entendido yo.
Un ejemplo de lo que digo: si tú tienes un archivo de texto y quieres cargar los datos en una base de datos como MysQL con LOAD DATA debes vigilar, si tienes la codificación UTF-8 en el servidor y la colación en las tablas, que el archivo de texto tenga esa misma codificación, pues en caso contrario te cargará pero cortará las palabras con acentos, etc.
Suerte

Última edición por jurena; 03/04/2008 a las 09:12
  #3 (permalink)  
Antiguo 13/04/2008, 21:18
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 17 años, 10 meses
Puntos: 4
Re: problema de encoding dependiendo de la entrada, trato de entender...

Increible Jurena de nuevo proporcionando información de calidad, justo tengo este problema en la base de datos que trabajo (tema de otro post) en cual configure todo para latin_1 y se veia genial en mi PC, lo llevo a la oficina y se veia horrible.

Revisando los links.

Saludos.
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 10:07.