PHP 连接 MSSQL 时 nvarchar 字段长度被截断为 255

许多用 PHP 连接 MSSQL 的新手经常遇到这个问题:数据库里面的 nvarchar 字段中数据一切正常,但是用 PHP 查询出来却发现长度只有 255,我们都知道,在 MySQL 里面 varchar 的长度只有 255,但是 MSSQL 却不是,不会是 PHP 将 nvarchar 按照 MySQL 的 varchar 处理了吧!本文给出了解决方法:

 
select cast(目标字段 as text) from 表名

假如你的 article 表中有个字段 summary 为 nvarchar,那么命令为:

 
select cast(summary as text) from article

关于 cast :

CAST ( expression AS data_type )

expression 为目标字段
data_type 为要转换成的数据类型

PHP 连接 MSSQL 时 text 字段被无故截断

第一次使用 PHP 连接 MSSQL 的朋友经常遇到这个问题:text 字段总是会被无故截断,只能发一两千字,有时截断时还出现乱码情况,而将执行插入的 SQL 语句输出却没有任何问题。呵呵,其实这个问题很简单:

PHP 的配置文件 php.ini 中 MSSQL 部分:

 
[MSSQL]
; Allow or prevent persistent links.
mssql.allow_persistent = On
 
; Maximum number of persistent links.  -1 means no limit.
mssql.max_persistent = -1
 
; Maximum number of links (persistent+non persistent).  -1 means no limit.
mssql.max_links = -1
 
; Minimum error severity to display.
mssql.min_error_severity = 10
 
; Minimum message severity to display.
mssql.min_message_severity = 10
 
; Compatability mode with old versions of PHP 3.0.
mssql.compatability_mode = Off
 
; Connect timeout
;mssql.connect_timeout = 5
 
; Query timeout
;mssql.timeout = 60
 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textlimit = 4096
 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textsize = 4096

请看这两个配置参数:

 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textlimit = 4096
 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textsize = 4096

相信你现在已经知道了问题的关键所在,只需要将这两个数值改大即可,不过,同时也要考虑:

 
; Maximum size of POST data that PHP will accept.
post_max_size = 2M

需要根据实际情况设置。