php+mssql的遇到一些问题

本文解决PHP从MSSQL读取数据时遇到的日期格式转换、字符串截断及ntext/nvarchar类型数据读取错误等问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.php从数据库中读取日期格式被自动转换了,形如12 26 2012 9:05PM,解决方法是在php.ini中把mssql.datetimeconvert 设置为 Off。

 

2.php查询mssql时,varchar、nvarchar字段被截断为255字节,而数据库中的数据一切正常,只是取出来的数据被截断了。解决方法:

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

 

CAST ( expression AS data_type )

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

 

如果表中有多个字段,或者程序已经写好,则需要改写许多sql语句,这时也可以采用将varchar(n)改为varchar(max),这时类型自动转换为text。缺点就是长度限制功能不能实现了。

 

如果发现text类型字段长度受限,则需要修改php.ini中的mssql.textlimit 和mssql.textsize。

Little idea about 255 characters limitation. :)

In tables I'm using column type "varchar" or "nvarchar" instead "text". And also I use for example varchar(8000). And there is "a bug". :) PHP will read this column only as varchar(255). So how to read more then 255 chars from varchar(8000)? It is very easy, use CAST to convert varchar type to text type.

select CAST(Comment as TEXT) from Job

PHP will read it. Check php.ini section [MSSQL] and set maximum text length. Check parameters

mssql.textlimit = 4096
mssql.textsize = 4096

Maximum length is 2147483647


 3.不能用 DB-Library(如 ISQL)或 ODBC 3.7 或更早版本将 ntext 数据或仅使用 Unicode 排序规则的 Unicode 数据发送到客户端。

 处理方法:

由于sql server中,ntext和nvarchar字段是用unicode编码存储内容的,因此php通过mssql扩展读取带ntext和nvarchar类型字段的时候会抱错。

如果 title 字段类型为 nvarchar,content 字段类型为 ntext ,那么下面的sql语句会报错:

select title,content from article where 1

正确的写法是:

select convert(varchar(255),title) as title, convert(text,content) as content from article where 1

或者干脆不使用nvarchar和ntext,代之以varchar和text。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值