FreeTDS 是開源的 TDS (Tabular Data Stream) 協議實現,讓 Linux/Unix 上的 Perl、PHP、Python、C/C++ 程式能連線 Microsoft SQL Server 或 Sybase。
# 1. 下載解壓
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.3.20.tar.gz
tar -xzf freetds-1.3.20.tar.gz
cd freetds-1.3.20
# 2. 配置編譯選項
./configure --prefix=/usr/local/freetds \
--with-tdsver=8.0 \
--enable-msdblib
# 3. 編譯安裝
make && make install
# 4. 環境變數
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib/' >> ~/.bashrc
source ~/.bashrc
# 5. 驗證
/usr/local/freetds/bin/tsql -C
freetds.conf位置:/usr/local/freetds/etc/freetds.conf(可由 --sysconfdir 指定)。
[global]
tds version = 8.0
client charset = UTF-8
text size = 64512
[mssql_server]
host = 192.168.1.100
port = 1433
tds version = 7.4
; 可覆蓋 global 設定
| 參數 | 說明 |
|---|---|
| tds version | TDS 協議版本:4.2(Sybase), 5.0, 7.0(SQL 7.0), 7.1(2000), 7.2(2005), 7.3(2008), 7.4(2012+), 8.0(最新) |
| host/port | SQL Server IP 與埠 |
| client charset | 字元集轉換(建議 UTF-8) |
| timeout/connect timeout | 查詢/連線逾時秒數 |
| dump file | 除錯日誌路徑 |
| 函數 | 用途 |
|---|---|
| dbinit() | 初始化 DB-Library |
| dblogin() | 取得 LOGINREC 結構 |
| DBSETLUSER/DBSETLPWD | 設定登入帳號/密碼 |
| dbopen() | 建立連線,回傳 DBPROCESS* |
| dbuse() | 選擇資料庫 |
| dbcmd/dbfcmd | 構建 SQL 指令 |
| dbsqlexec() | 送出 SQL 執行 |
| dbresults() | 取得結果集狀態 |
| dbnextrow() | 逐列讀取資料 |
| dbbind() | 綁定欄位至變數 |
| dbcancel/dbclose/dbexit | 清理資源 |
#include#include #include #define SERVER "mssql_server" #define USER "sa" #define PASS "your_password" #define SQL "SELECT name FROM sys.databases" int main() { LOGINREC *login; DBPROCESS *dbproc; RETCODE rc; if (dbinit() == FAIL) return 1; if ((login = dblogin()) == NULL) return 1; DBSETLUSER(login, USER); DBSETLPWD(login, PASS); if ((dbproc = dbopen(login, SERVER)) == NULL) return 1; if (dbuse(dbproc, "master") == FAIL) return 1; dbcmd(dbproc, SQL); if (dbsqlexec(dbproc) == FAIL) return 1; while ((rc = dbresults(dbproc)) != NO_MORE_RESULTS) { if (rc == FAIL) break; char name[128]; DBINT namelen; dbbind(dbproc, 1, NTBSTRINGBIND, 0, (BYTE*)name); while (dbnextrow(dbproc) != NO_MORE_ROWS) { printf("DB: %s\n", name); } } dbclose(dbproc); dbexit(); return 0; }
編譯:gcc -I/usr/local/freetds/include -L/usr/local/freetds/lib -lsybdb test.c -o test
freetds.conf host/port/tds version。client charset = UTF-8,確認資料庫排序規則支援 Unicode。unixODBC 設定 odbcinst.ini/odbc.ini 即可供 PHP/PDO/Python pyodbc 使用。