2009/01/06 18:37
文章作者:Enjoy 转载请注明原文链接。
翻看了之前写的两篇文章,没提到windows下连要进行那些设置。后经测试,原来需要把跟目录的NTWDBLIB.DLL移到system32下就行了。
读取datetime格式时碰到了些麻烦,在查询分析器中看到的是:2004-11-12 17:25:45.000
但用程序获取到的确不是这个,echo出来是:11 12 2004 5:25PM,这种格式,strtotime也认不到。
翻了下mssql的帮助手册,找到convert这个函数,用它解决了问题。
select convert(char,custom_time,20) as custom_time
20是产生这种格式:yyyy-mm-dd hh:mm:ss[.fff]
具体covert的用法可以参考MSSQL自带的手册。
本地测试OK后,去服务器测试,还得装个freetds,之前折腾过,linux下成功用php连接,参照方法,下了稳定版。
wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
tar -zxf freetds-stable.tgz
cd freetds-0.82
重编译php5
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2.2.0/bin/apxs --with-mysql=/usr/local/mysql --with-gd=/usr/local/gd --with-zlib --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --enable-sockets --with-iconv --enable-mbstring --with-curl=/usr/local/curl --with-mssql=/usr/local/freetds
这个php5也是最新稳定版,是5.2.8,发现装完会自动停掉apache(我记得以前的版本好像不会),得记得装完要马上去启动Apache。
装完,开始测试程序,发现获取到的中文全是乱码,怪事!测试了下,在sql里传递中文过去,MSSQL接收到的也是乱码。搜索了一段时间没找到答案。想到可能是php.ini里有什么设置,找了下,找到mssql.charset,默认是没有设置,可能是ISO-8858-1这种字符。我将其设为gb2312,结果直接连不上MSSQL服务器了。再试下,换成GB2312,哈,正确获取到中文字符了!
后来查了下,发现网上的文章说要改成"UTF-8"的,freetds不支持gb2312,不过实际证明了现在的版本是支持的。另外就是mysql.charset这个参数得大写。

新发现一个骗链接的方法
一些SQL语句的分析报表

