Linux下用freetds连接mssql中文乱码的问题【参考1】

由于工作原因我们需要通过php访问我们以前的Sql Server 2005数据,所以就有了这篇文章的诞生.废话就少说了,做程序设计的最不喜欢兜圈子了.用简介步骤说明问题,往下看.
系统:   Linux
数据库: Sql Server 2005

1.下载FreeTDS
  官方网站:http://www.freetds.org
 
2.安装FreeTDS
# tar zxvf freetds-current.tgz(解压)
# ./configure --prefix=/usr/local/freetds --with-tdsver=7.2 --enable-msdblib
# make
# make install

其他可选 根据自己情况
 --enable-dbmfix --with-gnu-ld --enable-shared --enable-static

安装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.测试连接:
[[email protected] 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

可以显示中文没问题!

6.让php支持mssql(freeTDS)
重新编译php 这些参数根据自己情况来定,下面是我们需要的
但是必须带--with-mssql=/usr/local/freetds
./configure
--prefix=/usr/local/php --with-mysql=/usr/local/mysql
--with-apxs2=/usr/local/apache/bin/apxs --with-gd=/usr/local/gd
--with-jpeg-dir=/usr/local/libjpeg --with-png-dir=/usr/local/libpng
--with-zlib-dir=/usr/local/zlib --with-libxml-dir=/usr/local/libxml2
--with-iconv=/usr/local/libiconv --with-freetype-dir=/usr/local/freetype

--with-pdo-mysql=/usr/local/phpbak/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so
--enable-sockets --with-curl --with-pear
--with-mssql=/usr/local/freetds

如果编译报错请执行:
# touch /usr/local/freetds/include/tds.h
# touch /usr/local/freetds/lib/libtds.a

7.php测试程序

<?php
/**
 * MOIT
 *
 * @author      明白([email protected])  日 期: Wed Nov 18 05:00:07 GMT 2009
 * @copyright   Copyright (c) 2009
 * @desc        测试

*/

$msconnect=mssql_connect("Server2005","java","java");
$msdb=mssql_select_db("PublicDB",$msconnect);
$msquery = "select TRUE_NAME,USER_ID,USER_NAME,PASSWORD from USER_INFO";
$msresults= mssql_query($msquery);
while ($row = mssql_fetch_array($msresults)) {
       echo $row[‘USER_ID‘] . " ".$row[‘TRUE_NAME‘]. " " . $row[‘USER_NAME‘] . " " . $row[‘PASSWORD‘] .  "<br>\n";
}
?>

8.我还碰到需要转码问题

$author = iconv(‘utf-8‘,‘gb2312‘,$row[‘TRUE_NAME‘]);//贴子的发表者的会员名称utf-8转成gb2312

9.安装完毕,祝您成功!

时间: 2024-10-12 19:24:36

Linux下用freetds连接mssql中文乱码的问题【参考1】的相关文章

Linux下用freetds连接mssql中文乱码的问题【参考2】

php5.3的情况下,用pdo的dblib驱动无法连接mssql的,根据官方的描述,5.2已经修改这个bug,5.3没有. 用php自带的mssql函数可以的.编译freetds,php_mssql,pdo_dblib参数如下: ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib./configure --with-php-config=/usr/local/php/bin/php-config -

LINUX下使用PHP连接MSSQL的方法

目录[-] 如何安装MSSQL.SO 如何安装PDO_LIB.SO 如何安装PDO_ODBC.SO 作者:Roban lee ([email protected]) LINUX下使用PHP连接MSSQL的方法有很多种,根据不同的环境,可以选择不同的方式,大致方法有以下几种: 使用MSSQL.SO扩展 使用PDO_LIB扩展 使用PDO_ODBC扩展 如何安装MSSQL.SO 1. MSSQL.SO 扩展依赖一个外部包,即 freeTDS, FreeTDS 官网: http://www.freet

[转载] linux下打开windows txt文件中文乱码问题

原文链接 在linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码. 出现这种情况的原因为两种操作系统的中文压缩方式不同,在windows环境中中文压缩一般为gbk,而在linux环境中为utf8,这就导致了在windows下能正常显示 txt文件在linux环境下打开呈现了乱码状态. 解决方法:在linux用iconv命令,如乱码文件名为shujujiegou.txt,那么在终端输入如下命令: iconv -f gbk -t

linux下 采用freetds 连接sqlserver2008

我主要参考了官方文章 要注意的几点 1.编译freetds(需要下载)的时候,请先添加--prefix=安装目录  --with-tdsver=7.1  //这个必须在7.0以上的 来自官方文档 ./configure  --prefix=/opt/freetds  --with-tdsver=7.1 2.另外php连接的时候还需要添加pdo_dblib(除了这个之外还有其他2种方式) 3.编译pdo_dblib的时候 一定要指定freetds安装目录,否则会连不到 参数如下 ./configu

linux下打开windows txt文件中文乱码问题 (转载)

转自:http://blog.csdn.net/imyang2007/article/details/7448177 在linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码. 出现这种情况的原因为两种操作系统的中文压缩方式不同,在windows环境中中文压缩一般为gbk,而在linux环境中为utf8,这就导致了在windows下能正常显示 txt文件在linux环境下打开呈现了乱码状态. 解决方法:在linux用iconv

解决在Linux下安装Oracle时的中文乱码问题

本帖最后由 TsengYia 于 2012-2-22 17:06 编辑 操作系统:Red Hat Enterprise Linux 6.1数据库:Oracle Database 11g R2 方法一:逃避法,改用英文界面安装 [[email protected] ~]# su - oracle    [[email protected] ~]$ export LANG=en_US.UTF-8    [[email protected] ~]$ cd /var/ftp/pub/database/ 

linux下javadoc生成文件出现中文乱码

javadoc命令的正确使用姿势 javadoc -d apidoc -windowtitle Testing -doctitle 'The API of javadoc' -header 'My class' -charset UTF-8 -author -version *.java 注意 使用-author和-version是因为javadoc默认不提取这两个信息 增加-endoing UTF-8选项可使代码文件编码也更改为UTF-8 版权声明:本文为博主原创文章,未经博主允许不得转载.

Linux下打开Windows环境下创建的文本文件显示中文乱码问题

产生原因: Linux下打开Windows环境下创建的文本文件出现中文乱码,因为两种操作系统的中文压缩方式不同,在Windows环境下中文编码一般为GBK,而在Linux环境中为UTF-8,这就导致了在Windows下能正常显示的文件在Linux环境下打开出现了乱码. 解决方法: 使用iconv命令, 命令语法:iconv -f fromcode [-cs] [-t tocode [file ...] 假设乱码文件名为Hello.c,那么在终端可使用如下命令进行格式转换: iconv -f GB

linux下配置php扩展mssql

前言:linux下配置php扩展mssql,使php通过mssql工具实现和远程win SQL server数据的传递. 有两种方法: 一.第一次编译php时提供mssql支持,即在编译参数上加上--with-mssql=/path 二.对于己安装的php,需把mssql当成一个模块,编译php使其支持,本文主要讲解这种方法: 1.安装配置freetds 下载源码包,并编译安装 #wget  tp://ibiblio.org/pub/Linux/ALPHA/freetds/stable/free