0

Tengo una base de datos con firebird con algunos campos tipo Blob. El problema es que al hacer una consulta sobre ese campo me devuelve bien los datos, pero no los caracteres extraños como acentos, eñes... que los sustituye por puntos.

Así tengo implementada la consulta para que lea los datos y me los devuelva codificados en un json (que posteriormente leeré con java):

try{

$str_conn="firebird:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET;

$dbh = new PDO($str_conn, DB_USER, DB_PASSWORD);

}catch(PDOException $ex){
        echo 'Error al conectar a la BBDD. '.$ex->getMessage();
        die();
}

    $res=$dbh->query("SELECT cast(DOSISADULTO as varchar(8191) character set utf8) AS DOSISADULTO FROM INSPECCIONES");

    $datos = array();

        foreach ($res as $row) {
            $datos[] = $row;        
        }

        echo json_encode($datos);

Pero esto me devuelve por salida:

No m.s de tres d.as // Esperado: No más de tres días

He probado otras codificaciones, como latin1, utfmb4... pero tampoco me termina de funcionar bien.

También he probado esta sentencia, pero nada.

$res=$dbh->query("select CONVERT(CAST(DOSISADULTO as BINARY) USING latin1) as DOSISADULTO from INSPECCIONES");

Seguramente me estoy perdiendo algún paso. ¿Algún consejo? Gracias.

Mimmetico
  • 603
  • 1
  • 4
  • 16
  • ¿Qué le estás pasando a la conexión en la constante `DB_CHARSET`? – A. Cedano Feb 06 '20 at 11:48
  • Le paso como utf8: define('DB_CHARSET', 'utf8'); – Mimmetico Feb 06 '20 at 11:51
  • Ok, generalmente con `utf8` debería resolverse, a no ser que falte configurar adecuadamente el entorno PHP o HTML o que en la BD misma tengas codificaciones raras para los datos. Si todo está bien en cada nivel, no hace falta escribir una consulta con casteos raros sino como todas las consultas: `SELECT DOSISADULTO FROM INSPECCIONES`. Creo que [esta respuesta](https://es.stackoverflow.com/a/59510/29967) puede ayudarte a hacer una revisión por niveles. – A. Cedano Feb 06 '20 at 11:53
  • Gracias, le echaré un buen repaso al tema a ver si encuentro la solución. – Mimmetico Feb 06 '20 at 15:17

0 Answers0