您的位置:首页 > 编程语言 > PHP开发

php+mssql的遇到一些问题

2012-12-28 12:43 344 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: