能在一起要学会知足,期望放低一点,幸福就会多一点。

Linux下FreeTDS连接SQLServer乱码问题解决方法

技术文档 8669浏览 0评论

在Linux上使用FreeTDS,通过PHP连接SQLServer的具体操作步骤可参见:http://loosky.net/?p=1888

在顺利连接上SQLServer数据库后,又出现了一个新问题,从数据库读取出来的中文文字出现了乱码。
通过在freetds.conf中进行相应的设置:client charset = utf8,但是貌似没有效果。

这里有必要说明一下,我的PHP文件是UTF8编码,Linux系统默认是UTF8编码,而Windows操作系统及SQLServer默认应该是GBK编码。在Linux下正常连接上SQLServer数据库后,插入中文是就全是乱码,读出时也是乱码。

通过如下的转换函数charset_convert进行字符转换,仍旧是乱码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function charset_convert($string, $input = 'GBK', $output = 'UTF-8')
{
    if (function_exists('mb_convert_encoding'))
    {
    	$output = mb_convert_encoding($string, $output, $input);
    }
    else if (function_exists('iconv'))
    {
    	$output = iconv($input, $output, $string);
    }
    else
    {
    	exit('charset_convert() needs mb_convert_encoding or iconv function support.');
    }
 
    return $output;
}

最后只好打开php.ini配置文件进行查看,在对mssql进行配置的相关内容中有如下这么一条:

; 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 = "ISO-8859-1"

从说明中可以看到这个是专门针对FreeTDS的,如果freetds.comf为空或者没有设置client charset时,可以在这块起用mssql.charset这个进行设置。因为SQLServer的编码是GBK,所以我将变量设置为GBK,如下:

mssql.charset = "GBK"

然后在将SQLServer中的数据进行读取、显示、插入到Mysql中的时候,使用上面的charset_convert函数对其进行转码,即可以正常显示了。问题得到圆满解决。

转载请注明:自由的风 » Linux下FreeTDS连接SQLServer乱码问题解决方法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址