网站深度测评
FreeTDS是什么网站?
FreeTDS.org 是一个开源数据库连接库的官方网站。它提供的 FreeTDS 是一组面向 Unix 和 Linux 的库,让程序能够直接与 Microsoft SQL Server 和 Sybase 数据库通信。
它解决什么问题
从技术上说,FreeTDS 是 TDS(Tabular Data Stream)协议的开源实现,而 TDS 正是 SQL Server 和 Sybase 自家客户端使用的协议。因此,在 Unix/Linux 环境下没有官方驱动时,FreeTDS 就充当了“翻译层”。
它支持多种协议版本,并提供三套 API 供程序调用。
典型使用场景
- Unix/Linux 上的 Web 服务器需要读取 SQL Server 中的数据并展示到网页。
- 把原本运行在 Windows NT 上的 SQL Server 数据库代码迁移到 Unix。
- 从 Unix 数据源向 SQL Server 导入数据。
- 在实时系统等没有原生驱动的平台上提供数据库访问能力。
- 配合 Perl、PHP 等语言使用,让这些语言也能连接上述数据库。
授权与资源
FreeTDS 的 C 库采用 GNU LGPL 许可证发布,具体条款见发行包中的 COPYING.LIB。
网站本身还提供文档(FAQ、用户指南、参考手册)、开发入口(Git 仓库、每日构建测试结果)、邮件列表存档,以及稳定版和每日快照的下载入口。当前列出的稳定版本为 1.5.19。
适合谁看
如果你是在 Linux/Unix 上做开发或运维、需要连接 SQL Server 或 Sybase,这个站点是获取库、文档和源码的起点。若你只用 Windows 官方驱动或纯云端托管数据库,则通常用不到它。
如何在Unix或Linux系统上安装和配置FreeTDS?
FreeTDS 在 Unix/Linux 上的安装通常分两步:先装库和工具,再写配置文件指定要连接的 SQL Server 或 Sybase 实例。
安装
多数发行版的软件源里已有 FreeTDS,可直接用包管理器安装,例如 Debian/Ubuntu 用 apt install freetds-bin freetds-dev,RHEL/CentOS 用 yum install freetds freetds-devel。想用最新版(资料中稳定版为 1.5.19)则从 FreeTDS.org 下载源码自行编译,C 库以 GNU LGPL 授权。
配置
核心是三个文件,通常放在 /etc/freetds/ 或 /usr/local/etc/:
freetds.conf:定义服务器别名、主机、端口和协议版本。给每个数据库实例起一个名字,之后程序用别名连接。interfaces(旧式写法):按 IP 和端口直接列服务器,新配置一般不需要。- 环境变量:
TDSVER指定协议版本,TDSSERVER/TDSPORT指定默认服务器和端口,FREETDS指向配置目录。
验证
用 tsql -S 别名 -U 用户名 -P 密码 测试连接,能进交互式 SQL 提示符就说明配置通了。之后 Perl(DBD::Sybase)、PHP(mssql/pdo_dblib)等可以直接复用这份配置。
常见用途
资料里列出的典型场景包括:Unix/Linux Web 服务器读取 SQL Server 数据、把 NT 上的 SQL Server 代码移植到 Unix、从 Unix 向 SQL Server 导入数据,以及在实时系统等没有原生驱动的平台上提供数据库访问。
选择条件
如果只是想让 PHP 或 Perl 连 SQL Server,优先用发行版包,省去编译;如果需要特定协议版本或新特性,再考虑源码安装并对照官方 User Guide 和 Reference Manual 调整 freetds.conf。
FreeTDS支持哪些数据库和TDS协议版本?
FreeTDS 主要面向两类数据库:Microsoft SQL Server 和 Sybase。它通过实现 TDS(Tabular Data Stream)协议,让 Unix/Linux 程序能像原生客户端一样连接这些数据库。
支持的数据库
- Microsoft SQL Server
- Sybase
TDS 协议版本
FreeTDS 资料中只说明它“支持多种不同版本的 TDS 协议”(supports many different flavors of the protocol),没有在页面上逐一列出具体版本号。因此无法从现有资料确认它支持哪些确切的 TDS 版本号。
通过哪些方式使用
FreeTDS 本身是一组 C 库,同时提供三种 API 访问方式,并且可与 Perl、PHP 等语言配合,从这些语言中访问 SQL Server 和 Sybase。
典型使用场景
- Unix/Linux Web 服务器读取 SQL Server 中的数据并展示到网页
- 把 SQL Server 数据库代码从 NT 移植到 Unix
- 从 Unix 数据源向 SQL Server 导入数据
- 在没有原生驱动的平台(如实时系统)上提供数据库访问
需要查具体 TDS 版本时
FreeTDS 官网提供用户指南、参考手册和 FAQ,具体协议版本支持情况可在这些文档中进一步确认。
FreeTDS提供哪三种API,分别适用于什么场景?
FreeTDS 提供三种 API,都是围绕 TDS(Tabular Data Stream)协议的 C 语言访问接口,选择哪一种取决于你的代码风格和移植需求。
三种 API 及适用场景
- DB-Library(db-lib):Sybase 早期客户端库的接口风格。适合从 Sybase 或旧版 SQL Server 环境迁移过来的代码,改动最小。
- CT-Library(ct-lib):Sybase 后来主推的客户端库接口,功能比 db-lib 更完整,支持更规范的连接与游标处理。适合新写的 C 程序,或需要较完整客户端行为的场景。
- ODBC:标准数据库访问接口。适合希望代码不绑定具体数据库、通过 ODBC 驱动管理器统一连接 SQL Server 与 Sybase 的情况,也便于与其他支持 ODBC 的语言或工具对接。
怎么选
| 你的情况 | 优先考虑 |
|---|---|
| 移植旧 Sybase/SQL Server 客户端代码 | DB-Library |
| 新写 C 程序,要较完整的客户端功能 | CT-Library |
| 想让程序不绑定具体数据库、走标准接口 | ODBC |
补充
这三种 API 之外,FreeTDS 还能配合 Perl、PHP 等语言使用,从这些语言访问 SQL Server 或 Sybase。典型用途包括 Unix/Linux Web 服务器读取 SQL Server 数据、把 SQL Server 数据库代码从 NT 移植到 Unix、从 Unix 向 SQL Server 导入数据,以及在实时系统等没有原生驱动的平台上提供数据库访问。C 库本身以 GNU LGPL 授权。
如何使用FreeTDS从PHP或Perl连接SQL Server或Sybase数据库?
FreeTDS 是 Unix/Linux 上对 TDS 协议的开放实现,PHP 和 Perl 通过它就能连接 Microsoft SQL Server 或 Sybase,不需要在服务器端装微软的驱动。
在 PHP 中使用
PHP 通常通过 PDO_DBLIB 或 mssql 扩展调用 FreeTDS,两者都需要系统先装好 FreeTDS 库和对应的 PHP 扩展。
- 连接 Sybase 或较老的 SQL Server:常用
sybase_connect()/mssql_connect()一类函数,或 PDO 的dblib驱动。 - 连接串形式类似
dblib:host=主机名:端口;dbname=数据库名,再传入用户名和密码。 - 需要在
freetds.conf里配置服务器条目,指定 TDS 版本(如 7.0、7.4)和端口,避免协议协商出错。
在 Perl 中使用
Perl 一般走 DBI + DBD::Sybase,DBD::Sybase 可以编译为使用 FreeTDS 作为底层驱动。
- 用
DBI->connect("dbi:Sybase:server=配置名;database=库名", 用户, 密码)建立连接。 - 服务器名对应
freetds.conf中的配置项,而不是直接写 IP。 - 查询、取结果走标准 DBI 接口,与连接 MySQL、PostgreSQL 的写法一致。
常见使用场景
- Unix/Linux Web 服务器把 SQL Server 里的数据展示到网页。
- 把原本跑在 NT 上的 SQL Server 数据库代码迁移到 Unix。
- 从 Unix 侧向 SQL Server 导入数据。
- 在实时系统等没有原生驱动的平台上提供数据库访问。
配置与排错要点
- 先确认 FreeTDS 已安装,再确认 PHP/Perl 扩展链接的是它而非其他驱动。
- 协议版本不匹配是最常见的失败原因,按目标数据库版本在配置里指定合适的 TDS 版本。
- 字符集设置会影响中文显示,连接时按需指定客户端字符集。
- 端口、实例名、命名管道等连接方式要和服务器实际配置一致。
选择条件
如果只是从 PHP 连 SQL Server,优先考虑 PDO_DBLIB,写法统一、便于换库;如果已有大量 Perl 脚本,用 DBD::Sybase 更自然。两者底层都依赖 FreeTDS,配置一次即可共用。
官方文档、FAQ、用户指南和参考手册可在 FreeTDS.org 找到,遇到协议或配置问题先查 FAQ 和用户指南。
FreeTDS的GNU LGPL许可证对商业使用有什么要求?
FreeTDS 的 C 库采用 GNU LGPL 许可证,因此可以用于商业软件,但需要满足 LGPL 对“动态链接”与“修改代码”的几项条件。
商业使用的基本条件
- 可以商用:LGPL 允许把 FreeTDS 用在自己的商业产品中,不要求你公开整个产品的源代码。
- 动态链接是常规做法:如果以动态库方式链接 FreeTDS,商业程序通常只需在文档中说明使用了 FreeTDS、附上其许可证文本,并保留版权声明。
- 修改 FreeTDS 本身要开源:如果你改动了 FreeTDS 的源代码,那么被修改的那部分 FreeTDS 必须继续以 LGPL 发布,并提供对应源码。
- 静态链接需注意:把 FreeTDS 静态编进商业程序时,LGPL 通常要求你提供目标文件或可重新链接的方式,让用户能够替换该库,否则可能被视为不符合许可证。
实际使用场景
例如,一家公司用 FreeTDS 让 Linux 上的 PHP 或 Perl 程序访问 SQL Server,只是调用它、不做修改,那么通常只需随产品附上 LGPL 许可证和版权声明。
如果该公司为了适配内部系统而修改了 FreeTDS 的源码,就需要把修改后的 FreeTDS 版本按 LGPL 提供出去,但不必公开调用它的业务程序。
下一步动作
- 查看发行包中的
COPYING.LIB,以该文件的具体条款为准。 - 若采用静态链接或修改源码,建议让法务确认是否满足“可替换库”的要求。
- 保留版权声明、许可证副本,并在文档中注明使用了 FreeTDS。
用户评价(0)