3

我正在使用FreeTDSLinux 上的 PHP 5.3.15 连接和使用 SQL Server 2008 数据库。我在这个数据库中有一个数据类型为VARCHAR(MAX).

mssql_bind()不幸的是,当值超过 8000 个字符时,我无法设置列的值。该值存储在数据库中,但在 8000 个字符处被截断。我正在调用的存储过程已将输入变量设置为正确的数据类型 ( VARCHAR(MAX))。

这是我尝试过的:

  • 在 php.ini 中,我将两者都设置mssql.textlimitmssql.textsize它们的最大允许值(2147483647)。似乎无论我将这些设置为什么,它们实际上都不会影响我可以发送的文本的大小。也就是说,即使将这些值设置为 100,也不会将文本截断为 100 个字符。
  • 设置mssql.textlimitmssql.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驱动程序的限制还是我遗漏了什么?

4

0 回答 0