Choosing a TDS protocol version

The TDS protocol version is probably something you'd rather not know even existed, much less something you'd have to choose. But there's not that much to it, really. Unless you run into an incompatibility, you're best off running with the highest protocol version supported by your server. That's what the vendors' own products do, which is why when you read the Sybase or Microsoft documentation you find no mention of TDS versions.

Table 3.1. Versions of the TDS Protocol, by Product

ProductTDS VersionComment
Sybase before System 10, Microsoft SQL Server 6.x4.2Still works with all products, subject to its limitations.
Sybase System 10 and above5.0Still the most current protocol used by Sybase.
Sybase System SQL Anywhere5.0 only Originally Watcom SQL Server, a completely separate codebase. Our best information is that SQL Anywhere first supported TDS in version 5.5.03 using the OpenServer Gateway (OSG), and native TDS 5.0 support arrived with version 6.0.
Microsoft SQL Server 7.07.0Includes support for the extended datatypes in SQL Server 7.0 (such as char/varchar fields of more than 255 characters), and support for Unicode.
Microsoft SQL Server 20007.1Include support for bigint (64 bit integers), variant and collation on all fields.
Microsoft SQL Server 20057.2Includes support for varchar(max), varbinary(max), xml datatypes and MARS[a].
Microsoft SQL Server 20087.3Includes support for time, date, datetime2, datetimeoffset.
Microsoft SQL Server 2012, 2014, 2016, 2017 or 20197.4Includes support for session recovery.
Microsoft SQL Server 2022 or 20258.0Includes support for TLS 1.3.

[a] Multiple Active Result Sets.


Automatic protocol version

If you are using Microsoft SQL Server it is recommended to leave the version to auto (the default), FreeTDS will use the highest 7.x version supported by the server. If you are using any Sybase product you could set version to 5.0 to get faster connections (although auto will work too). For best results, use the highest version of the protocol supported by your server. If you encounter problems, try a lower version. If that works, though, please report it!

For Microsoft servers protocol 8.0 and strict encryption go together: specifying one implies the other. See the encryption setting in freetds.conf.

Regarding obsolete versions

In the earlier days of FreeTDS, Microsoft did not release official specs for the TDS protocol. When MSSQL 2000 (product 8.0) was released, there was semi-official indications from the Microsoft community that the TDS protocol would be version 8.0. So the FreeTDS developers adopted that version for FreeTDS. Years later, when Microsoft started releasing official specs of the protocol, it became obvious that the TDS versions that FreeTDS had labeled 8.0 and 9.0 were actually versions 7.1 and 7.2 respectively.

Since FreeTDS 1.5, version 8.0 is the protocol introduced with MSSQL 2022, not the old name of version 7.1. If you are still using an old configuration specifying version 8.0 for MSSQL 2000, change it to 7.1.

TDS 4.2 has limitations

  • ASCII only, of course.

  • RPC is not supported.

  • BCP is not supported.

  • varchar fields are limited to 255 characters. If your table defines longer fields, they'll be truncated.

  • dynamic queries (also called prepared statements) are not supported.

The protocol version may also affect how database servers interpret commands. For example, Microsoft SQL Server 2000 is known to behave differently with versions 4.2 and 7.0. Version 7.0 is recommended for compatibility with Microsoft SQL Server tools.