PHP中的mssql_bind截断字符串

时间:2013-04-20 03:54:30

标签: php sql-server-2008 freetds truncated

我正在使用FreeTDS连接并使用Linux上的PHP 5.3.15中的SQL Server 2008数据库。我在此数据库中有一个列,其数据类型为VARCHAR(MAX)

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

这是我尝试过的:

    我在php.ini中
  • mssql.textlimitmssql.textsize都设置为允许的最大值(2147483647)。似乎无论我将它们设置为什么,它们实际上对我可以发送的文本的大小没有影响。也就是说,即使将这些值设置为100,也不会将文本截断为100个字符。
  • 使用mssql.textlimit设置mssql.textsizeini_set()。再次,这似乎没有任何影响。
  • maxlen的{​​{1}}属性设置为高于8000的数字。如上所述,即使将其设置为较低的数字似乎也没有任何影响。
  • 将列的数据类型更改为mssql_bind()和/或将TEXT的{​​{1}}属性更改为type

此外,为了让事情更加混乱(至少对我来说),我 可以 通过以下方式获取整个字符串长度以存储在数据库中: / p>

  • 在我的存储过程中,将声明为mssql_bind()的变量的值的长度硬编码为超过8000个字符。这成功地存储了整个字符串。
  • 不使用存储过程,而只是直接在PHP中执行查询:SQLTEXT。这成功地存储了整个字符串。

所以这就是我相信我已经将其缩小到VARCHAR(MAX)方法,将长度缩短为8000个字符。

这仅仅是PHP中"UPDATE my_table SET my_large_colmn = '{$text_longer_than_8000_chars}'"mssql_bind()驱动程序的限制,还是我错过了什么?

0 个答案:

没有答案