如何在MySQL中将BLOB SUB_TYPE 0转换为TEXT?

时间:2018-05-25 16:37:36

标签: php blob firebird

我的firebird数据库表中有一个字段,数据类型为BLOB SUB_TYPE 0(默认)。如何在php webservice query mySQL中使用SELECT查询将内容视为文本/字符串?

我试试这个:

<?php 

$str_conn="firebird:host=localhost;dbname=C:\Temporal\POLICLINICA.GDB;charset=utf8";

$dbh = new PDO($str_conn, "SYSDBA", "masterkey");

$res=$dbh->query("SELECT COD_PACIENTE, CONVERT(TRATAMIENTO USING utf8) AS TREAT, SESIONES FROM GES_FISOTERAPIA");

$datos = array();

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

echo json_encode($datos);

?>

专栏&#39; Tratamiento&#39;包含blob类型,但返回错误。

我必须阅读webservice中的列,因为我无权将数据库中的格式更改为TEXT或VARCHAR。

1 个答案:

答案 0 :(得分:2)

blob sub_type 0blob sub_type binary,包含二进制数据。如果您确定它实际上是字符数据,并且使用的字符集是UTF8,那么您可以显式地转换它:

cast(TRATAMIENTO as blob sub_type text character set utf8)

如果您需要varchar,则需要执行

cast(cast(binval as blob sub_type text character set utf8) as varchar(8191))

cast(cast(binval as varchar(8191) character set binary) as varchar(8191) character set utf8)

这似乎很复杂,但我需要这样做,因为它看起来直接从二进制blob转换为varchar并且字符集不起作用(至少,我在Firebird 3中获得了非ASCII字符的无效结果)。

我认为这是一个错误,使用cast(binval as varchar(8191) character set utf8)应该有用(但现在却不行)。

请注意,以这种方式转换为varchar时,值的最大长度是有限的:单字节字符集为32765,utf8为(max)4字节字符集为8191。

您可能需要实际使用blob,并明确读取blob。