Página 1 de 1

Problemas con codificación al hacer consulta con MySQL

NotaPublicado: 2011-05-16 19:52 @869
por luisjf
Hola buenas noches, soy nuevo en el foro y este es el primer hilo que coloco. Cabe resaltar de antemano que estuve verificando otros hilos a ver si conseguía solución a mi inconveniente y desafortunadamente no fue así.

Bueno, mi inconveniente radica en que tengo unas tablas de una herramienta ya existentes y en ellas necesito hacer unas consultas para generar unos reportes; estoy haciendo un pequeño desarrollo con el módulo DBI para conectar y extraer data de mis tablas pero cuando realizo dichas consultas no se reconocen los caracteres como acentos y todo aquello, yo he pensado que debe ser que necesito setear la codificación pero no sé cómo hacerlo en la consulta.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     $dbh = DBI->connect("DBI:mysql:xxxx","xxxx",'xxxx');
  2.     $sth = $dbh->prepare("select name from queue");
  3.     $sth->execute;
  4.     while( ($var_tmp)=$sth->fetchrow() ) {
  5.     $var[$n]=$var_tmp;
  6.     $n++;
  7.     }
  8.     $sth->finish;
  9.     $dbh->disconnect;
  10.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Nota: es necesario resaltar que he exportado mis tablas a .csv para verificar que no vengan los errores en la base de datos y veo todos los caracteres sin problemas al igual que con algún cliente de consultas como "mysql-query-browser"

Re: Problemas con codificación al hacer consulta con mysql

NotaPublicado: 2011-05-16 20:33 @898
por ileiva
Hola luisjf, ¡bienvenido! :D

Tomando tu ejemplo, esta versión me funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use DBI;
  2. binmode(STDOUT, ":utf8"); # para mostrar por pantalla
  3.  
  4. $n = 0;
  5. $dbh = DBI->connect(
  6.      "DBI:mysql:xxxx",
  7.      "xxxx",
  8.      'xxxx',
  9.      { mysql_enable_utf8 => 1 } # se activa utf8 seteando mysql_enable_utf8 a 1
  10. );
  11.  
  12. $sth = $dbh->prepare("select name from queue");
  13. $sth->execute;
  14. while( ($var_tmp)=$sth->fetchrow() ) {
  15.         $var[$n]=$var_tmp;
  16.         $n++;
  17. }
  18. $sth->finish;
  19.  
  20. # probar aquí con una inserción en la BD
  21. # $dbh->do('insert into queue values("hòlá")');
  22.  
  23. $dbh->disconnect;
  24.  
  25. foreach my $v(@var){
  26.         print "$v\n";
  27. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Problemas con codificación al hacer consulta con MySQL

NotaPublicado: 2011-05-17 04:01 @209
por explorer
Bienvenido a los foros de Perl en español, luisjf.

Lo primero que hay que averiguar es en qué codificación están los caracteres almacenados en la base de datos.

Lo normal es que estén en utf-8, pero podría ser otra.

Una vez sabido, lo que queda es 'decodificarles' una vez que les leas.

ileiva te ha mostrado un ejemplo en el que activa la opción mysql_enable_utf8 del módulo DBD::mysql (que es llamado de forma automática por DBI).

Esta opción le indica a DBI que lo que reciba o deba leer desde los campos textuales, debe ser considerado como que está codificado en utf-8. Cuando Perl los recibe, internamente los almacena en esa codificación.

Y luego queda la segunda parte: enviarlos a otro sitio. ileiva te pone de ejemplo el sacarlos por pantalla, con un print(). Como sabemos que están codificados en utf-8, debemos indicarle a Perl que queremos que los emita tal cual (quizás, porque nuestra terminal está funcionando también en esa codificación). Por eso pone la sentencia binmode(STDOUT, ":utf8");.

Si necesitaras cambiar la codificación, ahí es donde la indicarás, y Perl se encargará de hacer las conversiones necesarias, de forma transparente.

Si tuvieras la necesidad de usar una codificación distinta, o si, dentro del programa, necesitas realizar operaciones con otras cadenas de caracteres en otras codificaciones, quizás necesitarás hacer conversiones entre ellas. Para ello, te recomiendo que mires el módulo Encode.

Re: Problemas con codificación al hacer consulta con MySQL

NotaPublicado: 2011-05-17 06:10 @298
por luisjf
Muchas gracias. ¡¡Hoy probaré con sus recomendaciones y les cuento!!

Re: Problemas con codificación al hacer consulta con MySQL

NotaPublicado: 2011-05-17 08:41 @404
por luisjf
Excelente, amigos, ¡funcionó a la perfección! ¡Muchas gracias por la ayuda prestada! Me parece excelente este foro, porque en verdad hay gente comprometida a apoyar. ¡Espero en un futuro cercano poder empezar a dar mis aportes también a los foreros!