我的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。
答案 0 :(得分:2)
blob sub_type 0
是blob 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。