PHP沙龙 - PHPSalon.com - Justin's Blog - Sofee.cn

世界其实很简单,复杂的是人;生活其实很轻松,沉重的是感情!

用户操作
[即时聊天] [发私信] [加为好友]
JustinID:ezdevelop
271100次访问,排名224好友0人,关注者2
ezdevelop的文章
原创 156 篇
翻译 0 篇
转载 37 篇
评论 819 篇
Justin的公告
-------------------------
点击进入我的新BLOG
-------------------------
作者声明:本人专栏内的所有文章,除注明转载外均为本人原创,未经许可,严禁任何形式转载。
最近评论
muchool:http://cvsproxy.muchool.com/ 专门针对软件开发人员量身定做的CVS代理下载,无需安装任何CVS客户端,轻松而快速的打包下载CVS版本控制服务器上的资源,自动剔除版本控制信息,还原开发者的原始项目目录.
csnxlsh:也发个给我咯
谢谢了!我的邮箱是csnxlsh@sohu.com
ryl:robots.txt只是对好的搜索引擎google ,baidu....等一些好的,才遵守的规则
对垃圾的搜索引擎还是没用啊
所以不用phpmyadmin管理才是主要
ryl:居然有这么活宝的人
怎么把phpmyadmin都传上去
还安全吗
gudai:我等得花儿也谢了。
文章分类
收藏
    相册
    My Photos
    .Personal
    Justin's Tech Blog(RSS)
    My Alumni
    My Website
    Friend's Blog
    PHP/MySQL经验点滴
    大麦英语学习论坛
    速推网
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方案收藏

    新一篇: 重写了PHP扩展FreeImage的所有代码 | 旧一篇: 一直想继续写FreeImage扩展

    /*
    * 版权归PHPSalon.com所有,未经许可,严禁任何形式转载
    *
    * Author: Wenlong Wu
    */

    在CSDN的PHP版里老是看到有人问TEXT字段被截断的问题,偶也回答了无数次,今天索性就总结一下吧:

    一、针对MS SQL SERVER数据库

          有两种解决方案,如下:

    • 修改php.ini来实现:

          打开php.ini,可看到mssql.textsize,mssql.textlimit两个选项:

          ; Valid range 0 - 2147483647. Default = 4096.

          ;mssql.textlimit = 4096 

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

          可以看到默认配置为4096字节,也就是经常碰到的被截断为4K,将之改为合适的大小,去掉前面的分号,然后保存并重起WEB服务器即可。

          从上面两个选项可看到范围为:0 - 2147483647字节,其实-1也可以的,查看一下PHP源代码即可发现-1表示无限制 :)

          if (MS_SQL_G(textlimit) != -1) {
                sprintf(buffer, "%li", MS_SQL_G(textlimit));
                if (DBSETOPT(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
                      efree(hashed_details);
                      dbfreelogin(mssql.login);
                      RETURN_FALSE;
                }
          }
          if (MS_SQL_G(textsize) != -1) {
                sprintf(buffer, "SET TEXTSIZE %li", MS_SQL_G(textsize));
                dbcmd(mssql.link, buffer);
                dbsqlexec(mssql.link);
                dbresults(mssql.link);
          }

    • 在PHP中查询之前执行SET TEXTSIZE 合适的大小:

          只需在SELECT之前执行

          mssql_query("SET TEXTSIZE 65536");

          从上面PHP源代码中可看到其实也是执行SET TEXTSIZE的 :)

    二、针对Sybase数据库

          由于该扩展在php.ini没有像SQL SERVER那样的选项可配置,所以只有采用上面的第二种方法,即:

          在SELECT之前执行

          sybase_query("SET TEXTSIZE 65536");

    9月24日补充:
    有不少朋友可能也碰到过使用varchar类型的字段时,只返回256个字符的问题。
    其实这也不是PHP的BUG,而是微软提供的客户端即library限制了而已。
    弥补方法是转为TEXT字段,或者采用SQL转,如下:
    SELECT CAST(myfield AS TEXT) AS myfield FROM table

    发表于 @ 2004年06月26日 13:41:00|评论(loading...)|编辑

    新一篇: 重写了PHP扩展FreeImage的所有代码 | 旧一篇: 一直想继续写FreeImage扩展

    评论

    #Fwolf 发表于2004-06-30 10:29:00  IP: 218.12.46.*
    这个是好东西啊
    #fworl 发表于2004-09-06 16:32:00  IP: 220.173.204.*
    可是我用php通过odbc与sybase相连时也出现被截断的现像,该怎么解决?
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Justin