標籤:
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 --with-mssql=/usr/local/freetds/
./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds --enable-pdo --with-pdo-dblib=/usr/local/freetds/
用內建mssql函數無法設定字元集,set names 不被支援,最後參考了adodb的代碼,發現解決這個問題還得用com,或者用ative mssql driver, 這兩東西在windows下可以,linux還是不大好使的。解決辦法是編輯/usr/local/freetds/etc/freetds.conf
加上一行client charset = GBK, 設定成utf-8是不對的,因為mssql定序資料庫預設設定是Chinese PRC,相當於gb2312,
另外php.ini 裡面mssql.charset 是不需要設定的,其實說得很清楚:
; 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
當FreeTDS的client charset 為空白或者沒有設定的時候才需要設定這個。曾經錯誤的將這裡設定成utf-8,FreeTDS的client charset 也設定成utf8,結果mssql_connect的時候就開始報錯了。最終結論,只需要設定FreeTDS的client charset 為GBK,然後在php的程式裡面iconv(‘GBK‘, ‘UTF-8//IGNORE‘, $str);一下就一切正常了。
Linux下用freetds串連mssql中文亂碼的問題【參考2】