最近做了一个php项目,要连接sqlserver2005,在windows下很方便,就不用在说了,关键是系统最后要部署到linux下,而微软没有针对linux下的sqlserver接口,所以只能安装第三方软件,freetds了,下来我把安装的过程列举出来。
1.安装freetds
写道
wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
tar zxvf freetds-stable.tgz
cd freetds-0.82/
./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
make && make install
echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
ln -s /usr/local/freetds/lib/libsybdb.so.5.0.0 /usr/local/freetds/lib/libsybdb.so.4
rm -f /usr/local/freetds/etc/freetds.conf
在freetds.conf中插入以下内容
写道
[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
host = 192.168.7.217
port = 1433
tds version = 8.0
#client charset = UFT-8
host为sqlserver数据库的IP地址,port为端口号,tds version是freetds的版本号 client charset是客户端的编码格式,说是能解决乱码问题,但我最后测试时,这个配置文件根本没有起作用,也没用,删除掉对连接数据库也没有任何影响,不知道是我那没设置对还是怎么回事,反正最后是可以用。
保存后,就可以测试freetds安装成功了没,可以用以下命令连接数据库测试一下
/home/software/freetds-0.82/src/apps/tsql -S 192.168.7.217 -U sa -P 123456
如果出现>1这样的显示,说明你安装成功了,可以输入sql语句进行操作数据库了。
2.重新编译php
写道
cd /data0/software/php-5.2.XX/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
这样就会在PHP的扩展目录中生成一个mssql.so文件
3.配置php.ini
在文件中加入 extension = "mssql.so"
然后重启PHP就可以,我装的是php-fpm,把以重启php-fpm就可以
/usr/local/php/sbin/php-fpm restart
4.测试
这样我们在PHP中通过phpinfo就可以看到mssql已经支持了。
我PHP的代码编码格式是utf-8,然后测试时可以正常连接数据库,但是插入中文是就全是乱码,读出时也是乱码,sqlserver数据库的编码格式是gbk, 最后我改freetds.conf中的client charset 是不起任何作用,反正是乱码,最后索性把freetds.conf删掉也可正常连接,看来这个配置文件不起作用。
最后只好打开php.ini配置文件找到以下代码
写道
; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
; mssql.charset = "utf-8"
看看说明就知道,是专门针对性freetds的,如果freetds.comf为空或者没有设置client charset时,可以在这块起用mssql.charset这个设置,最后我只好起用mssql.charset = "GBK", 其实我们可以直接设置成utf-8格式,因为我php代码用的是utf-8编码,这样在插入查询数据库时不用在做转码,因为sqlserver用的是gbk。但是纠结的是我们在windows环境下操作数据时是先转成gbk才插入进去的。为了对代码改动影响小一点,只好改成mssql.charset="GBK",这样总算把问题解决了。
5.疑惑
freetds.conf不起作用,删除掉也不影响, php.ini中说的是If empty or not set the client charset from freetds.comf is used。 文件名是freetds.comf 两个文件名的扩展名不一样,难道要把freetds.conf改成freetds.comf才起作用。因为时间关系,没有做测试,如果大家有谁这样测试的可以告诉我一下。
在linux下php.ini中可以改mssql.charset,这样不用在代码中操作sqlserver数据时做编码转换,而在windows系统下,是不是也有这样的功能呢,反正我没有发现,如果有谁知道,可以说说。
以下就是我配置linux下连接sqlserver的过程,做个记录,希望大家对不对的地方能补充完整
分享到:
相关推荐
这是在linux下用freetds中DB-Library连接sqlserver2005的经典例子,其实这个例子可以按freetds的用户手册中 的方法得到,只是这个里面我加了注释
1.1 核心代码: 1.2 直接执行 Sql 语句 1.3 不带参数的存储过程 1.4 带参数的存储过程 2.1 核心代码: 2.2 直接执行 sql 语句 2
主要给大家介绍了关于laravel5使用freetds连接sql server的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
编辑来自: Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/zhangm168/article/details/6859112#
UNIX_Linux下使用FreeTDS访问Microsoft SQL Server数据库.pdf
linux配置php5.6.23连接sqlserver,使用freetds php拓展使用mssql和dblib
主要需要以下库文件(/freetds/usr/lib) libct.so libct.so.4 libct.so.4.0.0 ...libsybdb.so.5.1.0(连接MS SQL SERVER最重要,我连的是2008 R2版) libtdsodbc.so libtdsodbc.so.0 libtdsodbc.so.0.0.0
在Linux/Unix下面访问WINDOWS SQLSERVER 的ODBC驱动程序, 很不错的
在linux下操作sqlerver 通过在linux下 安装unixODBC 和FreeTDS,从而可以操作sqlserver 就是otl编程中的odbc
linux下PHP支持mssql的配置说明freetds并且解决乱码问题.pdf
linux下PHP支持mssql的配置说明freetds并且解决乱码问题借鉴.pdf
Freetds Linux下工具,本人已在RHEL5.8系统测试使用,用于连接microsoft sql server,
说明: Linux服务器系统:CentOS 5.5 Web环境:LAMP或者LNMP Windows服务器系统:Windows Server ...一、在Linux服务器中安装freetds 1、安装编译工具及驱动程序 yum install make apr* autoconf automake gcc gcc-c
FreeTDS是一个程序库,可以实现在Linux系统下访问微软的SQL数据库。 在CentOS7上安装成功。
linux下php5.6连接sqlserver2008教程,里面有步骤和对应的程序,不用去下,自己解压一哈根据readme步骤操作,我已经把坑都走完了,应该能100%装成功.还有php测试连接代码.安装mssql的第4改成./configure --with-...
sqlServer执行存储过程报错:42000 - [SQL Server]SQL Server 阻止了对组件“Ole Automation Procedures”的 过程“sys.sp_OACreate”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以...
它用于连接 Microsoft SQL Server(6.5,7,2000,2005,2008 和 2012)和Sybase(10 ,11 ,12 ,15)。 jTDS是基于freeTDS的,并且是最快的可企业级应用的SQL Server和Sybase的JDBC驱动程序。 jTDS完全与JDBC3.0...
vi /etc/freetds/freetds.conf 复制代码 代码如下:[global]# TDS protocol versiontds version = 8.0client charset = UTF-8# A typical Microsoft server[Server55]host = 192.168.1.55port = 1433tds version = ...