我正在使用FreeTDS
Linux 上的 PHP 5.3.15 连接和使用 SQL Server 2008 数据库。我在这个数据库中有一个数据类型为VARCHAR(MAX)
.
mssql_bind()
不幸的是,当值超过 8000 个字符时,我无法设置列的值。该值存储在数据库中,但在 8000 个字符处被截断。我正在调用的存储过程已将输入变量设置为正确的数据类型 ( VARCHAR(MAX)
)。
这是我尝试过的:
- 在 php.ini 中,我将两者都设置
mssql.textlimit
为mssql.textsize
它们的最大允许值(2147483647)。似乎无论我将这些设置为什么,它们实际上都不会影响我可以发送的文本的大小。也就是说,即使将这些值设置为 100,也不会将文本截断为 100 个字符。 - 设置
mssql.textlimit
和mssql.textsize
使用ini_set()
。同样,这似乎没有影响。 - 将
maxlen
属性设置mssql_bind()
为大于 8000 的数字。与上面一样,即使将其设置为较低的数字似乎也没有影响。 - 将列的数据类型更改为
TEXT
和/或将type
属性更改mssql_bind()
为SQLTEXT
。
此外,为了使事情更加混乱(至少对我而言),我可以通过以下方式将整个字符串长度存储在数据库中:
VARCHAR(MAX)
在我的存储过程中硬编码声明为超过 8000 个字符的变量值的长度。这成功地存储了整个字符串。- 不使用存储过程,而是直接在 PHP 中执行查询:
"UPDATE my_table SET my_large_colmn = '{$text_longer_than_8000_chars}'"
. 这成功地存储了整个字符串。
所以这就是我认为我将其缩小到mssql_bind()
将长度截断为 8000 个字符的方法的方式。
这仅仅是 PHP 中mssql_bind()
的FreeTDS
驱动程序的限制还是我遗漏了什么?