我有一个varbinary(8000)
在SQL Server数据库中的字段,我想拉出来。 为varbinary数据的SQLSRV限制是8000。
但是,如果我做了选择上的数据
<?php
$query = "
SELECT myvarbinary
FROM table
WHERE id = 48033;
";
$results = sqlsrv_query($this->conn, $query);
return sqlsrv_fetch_array($results, SQLSRV_FETCH_NUMERIC);
然后sqlsrv_fetch_array
给出了一个错误:
PHP Fatal error: Invalid sql_display_size
截断溶液(的作品,但没有用)
如果我转换领域varbinary(4000)
那么它的工作原理,但varbinary(4001)
失败:
<?php
$query = "
SELECT CAST(myvarbinary AS varbinary(4000)) AS myvarbinary
FROM table
WHERE id = 48033;
";
$results = sqlsrv_query($this->conn, $query);
return sqlsrv_fetch_array($results, SQLSRV_FETCH_NUMERIC);
然而,这是没有用的 - 我截断一半的数据。
这也意味着,由于某种原因,虽然极限应该是8000,这是SQLSRV库是由于某种原因时,它会针对允许的最大字段大小中的值倍增。
MAX的解决方案 - 这将完全回到了8000个字节,或只是静静地截断了吗?
我也可以用varbinary(max)
,其工作原理。
<?php
$query = "
SELECT CAST(myvarbinary AS varbinary(max)) AS myvarbinary
FROM table
WHERE id = 48033;
";
$results = sqlsrv_query($this->conn, $query);
return sqlsrv_fetch_array($results, SQLSRV_FETCH_NUMERIC);
在测试该会从SQLSRV返回的数据我不能证明它截断数据或没有。 所以我觉得这个解决方案的工作,但我不能肯定。
谁能给我多一点信心,SQLSRV不截断我的数据下降到4000个字节?
编辑:这TechNet文档表明,如果要大于8KB传输图像,那么你应该使用
varbinary(max)
在本节中,我们检查在发送图像的服务器作为二进制流的实施例的应用程序代码。 下面的代码打开一个图像作为流,然后将该文件发送到服务器中的部件到在时间8KB:
$tsql = "INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?); SELECT SCOPE_IDENTITY() AS PhotoID"; $fileStream = fopen($_FILES['file']['tmp_name'], "r"); $params = array( array( $fileStream, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY), SQLSRV_SQLTYPE_VARBINARY('max') ) );