linux下安装freetds连接sqlserver2005解决乱码问题
最近做了一个php项目,要连接sqlserver2005,在windows下很方便,就不用在说了,关键是系统最后要部署到linux下,而微软没有针对linux下的sqlserver接口,所以只能安装第三方软件,freetds了,下来我把安装的过程列举出来。
?
1.安装freetds
?
?写道
?
[global]?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/?
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.?
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的过程,做个记录,希望大家对不对的地方能补充完整
?
?
?