2010-09-27

ubuntu 10.04 要使用freetds 才能連入 mssql

因為我用 php 5.2.x 版的
所以先重裝一次 http://z-win.blogspot.com/2010/05/ubuntu-php-52x.html
最後加上
sudo apt-get install freetds-bin
sudo aptitude install -t karmic php5-sybase
#改freetds 設定(這是我自已要用的)
sudo vim /etc/freetds/freetds.conf
#在[global]加上
text size = 104857600 #大小能到100b
client charset = UTF-8 #預設utf-8
#改mssql_connect的語言
sudo vim /etc/php5/apache2/php.ini
#加入
mssql.charset = "UTF-8"
sudo /etc/init.d/apache2 restart
#test方法
tsql -H mssql.ip -p 1433 -U username
#輸入password後出現 1> 就成功了
#php



#也可以用 匿名主機 方式連入,但mssql 要sp4以上
sudo vim /etc/freetds/freetds.conf
#加入
[mssql_con1]
host = this.con1.server
port = 1433
tds version = 8.0

#test方法
tsql -S mssql_con1 -U username
#輸入password後出現 1> 就成功了

#php測試
<?php
echo mssql_connect('mssql_con1', 'username', 'password') 
? 'success' 
: 'failure';
?> 
當mssql的資料是 uniqueidentifier 在LINUX上的FREETDS 要用  mssql_guid_string 或 在SQL 用 cast(欄位名 as varchar(36)) 轉換字元, 在windows用com 時會自動轉
uniqueidentifier  的說明:
http://technet.microsoft.com/zh-tw/library/ms190215.aspx
php的其它解法可以看:
http://uk.php.net/manual/en/function.mssql-guid-string.php


如果發生:
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.
請使用底下語法:

SET ANSI_WARNINGS ON
SET ANSI_NULLS ON

參考:
http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/1d501b57-fc58-4fbe-9bec-6c38ad158a62

7 則留言:

匿名 提到...

請問作者
沒有安裝完整的freetds
應該不用能 tsql
tsql -H mssql.ip -p 1433 -U username

那請教是哪裡輸入
tsql -H mssql.ip -p 1433 -U username
是在 /etc/freetds嗎
但裡面沒有tsql的資料???
請指教謝謝

紫贏 提到...

問一下,你是用什麼方式裝, 如果自行編譯freetds的話,tsql大部份在 /usr/local/freetds 底下,你要自行連結到/usr/bin/ 中

匿名 提到...

作者你好
我直接從freetds官網download freetds-0.82檔案下來
並下指令
./configure --prefix=/etc/freetds --with-tdsver=8.0 --enable-msdblib

把它與apache2安裝在 /etc底下
就可以連線了
但[mssql]===>不能能
用[輸入ip]=====>卻可以連
不曉得為什麼
請指教謝謝

紫贏 提到...

#也可以用 匿名主機 方式連入,但mssql 要sp4以上
sudo vim /etc/freetds/freetds.conf
#加入
[mssql_con1]
host = this.con1.server
port = 1433
tds version = 8.0

#test方法
tsql -S mssql_con1 -U username
#輸入password後出現 1> 就成功了

匿名 提到...

感謝作者,我會試試看
不好意思,再請教fedora安裝
請問有操作手冊嗎??
因為我一直無法執行透過php連freetds(freetds是可以連的),看了很多網站,不得其果
因為我都用yum裝php-mssql,其實跟ubuntu一樣,都採用sudo apt-get install 安裝方式一樣,但ubuntu可以而fedora卻不可以,故請教之

紫贏 提到...

還要裝 php5-sybase
freedtds 有說明

http://www.freetds.org/userguide/php.htm

我是用 sudo aptitude install -t karmic php5-sybase 去裝的

紫贏 提到...

手動安裝 php5-sybase 的元件 請看
http://www.freetds.org/userguide/php.htm