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 則留言:

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

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

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

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

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

    回覆刪除
  4. #也可以用 匿名主機 方式連入,但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> 就成功了

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

    回覆刪除
  6. 還要裝 php5-sybase
    freedtds 有說明

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

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

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

    回覆刪除