安装phpmssql 扩展 如果phpize 找不到命令 需要安装php-devel底包
//进入php的源码目录、MSSQL模块源码目录
# cd /home/wxw/gd/php-5.2.5/ext/mssql/
//生成编译配置文件
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
# make
# make install
在编译配置的时候可能会遇到找不到FreeTDS的错误:
configure: error: Directory /usr/local/freetds is not a FreeTDS installation directory
FreeTDS的软件获取:
可以在官网上进行下载:http://www.freetds.org/ ,我下载的版本是freetds-0.91,好像是最新版的
FreeTDS的安装:
1、将下载下来的压缩文件解压到任意目录,进入到解压后的目录中
2、将身份切换到root身份,开始配置编译环境,
./configure --prefix=/home/joey/work/freetds --with-tdsver=7.1 --enable-msdblib --disable-libiconv
如果以上面的方式编译安装并设置freetds.conf里client charset=utf8 , php连接sqlserver 仍然有乱码的话 ,请删除重新安装
./configure --prefix=/home/joey/work/freetds --with-tdsver=7.1 [只指定版本,不用别的参数]
解释一下各参数的意义:--prefix是FreeTDS的安装路径,可以根据需要随意设置;
--with-tdsver设置FreeTDS的版本,我这里设置了7.1是为了能连接SQL2005,网上有的文档说这里设置成8.0,但是我设置成 8.0后编译出来的居然是5.0的,不知道什么原因,按这样设置成7.1编译出来的FreeTDS的版本就是7.1的;
--enable-msdblib是是否允许Microsoft数据库函数库,这里为允许;
--disable-libiconv这个选项不一定是必须的,FreeTDS会做一次字符集的默认转换,要查找ISO8859-1字符集,这有可能会导致中文乱码;
--host编译器名字,由于我的运行平台是arm平台,所以用到了交叉编译
3、在配置好了以后,接下来就简单了,就是用make,然后make install ;也可以一步到位,make && make install ;
FreeTDS测试:
FreeTDS安装好了,接下来就可以查看下FreeTDS状态了;
运行./tsql -C ,在安装目录的bin目录下可以找到tsql ,查看终端打印出来信息,可以看到版本号为7.1了:
乱码问题 一定要在freetds的配置文件中 freetds.conf 中 指定client charset = utf8 不然你的php使用utf8编码无论如何转换都是乱码的
下面是详细配置
安装freetds到目录/usr/local/freetds:--prefix=/usr/local/freetds 如果不带这个默认好像也是这目录
对应数据库版本--我的是Microsoft SQL Server 2005 所以我带的是 --with-tdsver=7.2
4.2 Sybase SQL Server < 10 and Microsoft SQL Server 6.5
5.0 Sybase SQL Server >= 10
7.0 Microsoft SQL Server 7.0
7.1 Microsoft SQL Server 2000
7.2 Microsoft SQL Server 2005
3.编辑/usr/local/freetds/etc/freetds.conf
# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $
#
# This file is installed by FreeTDS if no file by the same
# name is found in the installation directory.
#
# For information about the layout of this file and its settings,
# see the freetds.conf manpage "man freetds.conf".
# Global settings are overridden by those in a database
# server specific section
[global]
# TDS protocol version
; tds version = 4.2
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
#解决中文乱码问题
client charset=utf8
# A typical Sybase server
#[egServer50]
# host = symachine.domain.com
# port = 5000
# tds version = 5.0
# A typical Microsoft server
#[egServer70]
# host = ntmachine.domain.com
# port = 1433
# tds version = 7.0
#这个名字程序和命令行用得上,叫什么自己定
[Server2005]
host = 192.168.3.100 #我的SQL Server2005 IP,根据自己改
port = 1433
tds version = 7.2
4.测试连接:
[root@test bin]# ./tsql -S Server2005 -p 1433 -U java -P java -D PublicDB
locale is "zh_CN"
locale charset is "GB2312"
Default database being set to PublicDB
1>
出现这个表示连接成功! 退出:quit 和 exit 都行.
参数说明
-S 配置的服务名
-H 主机名
-p 端口
-U username
-P password
-D database
5.测试查询:
# ./tsql -S Server2005 -p 1433 -U java -P java -D PublicDB
1> select USER_ID,TRUE_NAME from USER_INFO
2> go
可以显示中文没问题!