Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Bases de Datos » Problemas con codificación al hacer consulta con MySQL  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 5 mensajes ] 
 
Nota 2011-05-16 19:52 @869
Avatar de Usuario
Perlero Nuevo
Registrado: 2011-05-11 17:57 @790
Mensajes: 15
Problemas con codificación al hacer consulta con MySQL  RESUELTO
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.

Syntax: [ Download ] [ Hide ]
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.  


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"

_________________
personal: debian 6 (squeeze) with perl v5.10.1
laboral: canaima 3 with perl v5.10.1


Nota 2011-05-16 20:33 @898
Avatar de Usuario
Perlero Nuevo
Registrado: 2011-04-23 03:25 @184
Ubicación: Santiago, Chile
Mensajes: 30
Re: Problemas con codificación al hacer consulta con mysql
Hola luisjf, ¡bienvenido! :D

Tomando tu ejemplo, esta versión me funciona:

Syntax: [ Download ] [ Hide ]
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. }

_________________
This is your life, and it's ending one minute at a time.


Nota 2011-05-17 04:01 @209
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con codificación al hacer consulta con MySQL
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.

_________________
JF^D Perl programming


Nota 2011-05-17 06:10 @298
Avatar de Usuario
Perlero Nuevo
Registrado: 2011-05-11 17:57 @790
Mensajes: 15
Re: Problemas con codificación al hacer consulta con MySQL
Muchas gracias. ¡¡Hoy probaré con sus recomendaciones y les cuento!!

_________________
personal: debian 6 (squeeze) with perl v5.10.1
laboral: canaima 3 with perl v5.10.1


Nota 2011-05-17 08:41 @404
Avatar de Usuario
Perlero Nuevo
Registrado: 2011-05-11 17:57 @790
Mensajes: 15
Re: Problemas con codificación al hacer consulta con MySQL
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!

_________________
personal: debian 6 (squeeze) with perl v5.10.1
laboral: canaima 3 with perl v5.10.1


Responder al tema  [ 5 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO