Как обрабатывать BLOB-данные с помощью DBI?
Обработка BLOB-данных с помощью DBI очень проста.BLOB-столбцы указываются в операторе SELECT в соответствии с обычными столбцами.Однако вам также необходимо указать максимальный размер BLOB, который дескриптор базы данных может получить с помощью атрибута LongReadLen.
Например:
### $dbh is a connected database handle
$sth = $dbh->prepare( "SELECT blob_column FROM blobby_table" );
$sth->execute; would fail.
### $dbh is a connected database handle
### Set the maximum BLOB size...
$dbh->{LongReadLen} = 16384; ### 16Kb...Not much of a BLOB!
$sth = $dbh->prepare( "..." );
будет успешным при условии, что значения столбцов не превышают указанное значение .
Если данные BLOB длиннее значения LongReadLen, произойдет ошибка.Однако DBI предоставляет дополнительную функциональность, которая автоматически усекает извлеченный BLOB до размера LongReadLen, если он длиннее.Это не приводит к возникновению ошибки, но может сделать ваши извлеченные BLOB-данные бесполезными.
Это поведение регулируется атрибутом LongTruncOk, для которого по умолчанию установлено ложное значение (что приводит к сбою слишком длинных выборок BLOB).1027 *
### Set BLOB handling such that it's 16Kb and can be truncated
$dbh->{LongReadLen} = 16384;
$dbh->{LongTruncOk} = 1;
Усечение данных BLOB может не иметь большого значения в тех случаях, когда BLOB содержит закодированные данные длины прогона, но данные, содержащие контрольные суммы в конце, например, ZIP-файл, будут бесполезными.