Я вставляю около 1.1 Мб данных в поле Mysql типа LONGBLOB. Это далеко от максимальной поддерживаемой длины поля LONGBLOB.
Вставка, похоже, работает.
Если я делаю strlen($data)
перед вставкой, он возвращает 1059245.
Если я сделаю запрос после вставки:
SELECT OCTET_LENGTH(`data`)...
Он возвращает 1059245
Но если я это сделаю
$stmt = $pdo->prepare("SELECT `data` FROM `tbl_mytable` WHERE `id` = :id LIMIT 1"); $stmt->bindValue(":id", $id, PDO::PARAM_INT); $stmt->execute(); $data = $stmt->fetch(PDO::FETCH_ASSOC); echo strlen($data['data']);
он возвращает 1048576
Мои данные, похоже, вырезаны после 1048576 байт.
Почему я получаю только первые 1048576 байт данных при выполнении запроса?
Это PDO Configuration, что-то вроде max_fetch_length?
По умолчанию это MYSQL_ATTR_MAX_BUFFER_SIZE.
Это устранило проблему:
$pdo->setAttribute(PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, 1024*1024*50); // 50 MB