• Publicidad

Problemas con codificación al hacer consulta con MySQL

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Problemas con codificación al hacer consulta con MySQL

Notapor luisjf » 2011-05-16 19:52 @869

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.002 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"
personal: debian 6 (squeeze) with perl v5.10.1
laboral: canaima 3 with perl v5.10.1
Avatar de Usuario
luisjf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-05-11 17:57 @790

Publicidad

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

Notapor ileiva » 2011-05-16 20:33 @898

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.002 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
ileiva
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2011-04-23 03:25 @184
Ubicación: Santiago, Chile

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

Notapor explorer » 2011-05-17 04:01 @209

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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

Notapor luisjf » 2011-05-17 06:10 @298

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
Avatar de Usuario
luisjf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-05-11 17:57 @790

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

Notapor luisjf » 2011-05-17 08:41 @404

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
Avatar de Usuario
luisjf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-05-11 17:57 @790


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron