What are the functional differences between iODBC and unixODBC?
I finally found some time for a more complete answer... (attn @mloskot -- you can change your accepted answer, if you agree that this one is more accurate and/or complete than the other)
iODBC and unixOBDC are basically API equivalent, both being cross-platform implementations of Microsoft's ODBC standard. iODBC's flexible Unicode support includes UCS-2, UTF-8, UCS-4. iODBC libraries are bundled into macOS Panther (10.3.0) through Big Sur (11.2.x), and may be built and/or installed on AIX, Solaris, HP-UX, any Linux distribution, *BSD, other Unix-like OS, and more. iODBC has been thread safe for a very long time, and is actively maintained and supported by OpenLink Software (my employer).
The table below covers the most common comparative questions (is there something I should add?), and is based on iODBC 3.52.14, as of February 2021 (reports version 03.52.1421.0217
), and unixODBC 2.3.9, as of September 2020.
For a somewhat more detailed comparison, and a much more fancy and detailed table, see this spreadsheet
feature | iODBC | UnixODBC |
---|---|---|
Unicode support | ||
UCS-2 | YES | YES |
UCS-4 (a/k/a UTF-32) | YES | NO |
UTF-08 (a/k/a UTF-8) | YES | NO |
UTF-16 | YES | YES |
UTF-32 (a/k/a UCS-4) | YES | NO |
Supports drivers and apps developed using other SDKs |
||
Supports drivers developed using iODBC SDK | YES | NO |
Supports apps developed using iODBC SDK | YES | NO |
Supports drivers developed using unixODBC SDK | YES | YES |
Supports apps developed using unixODBC SDK | YES | YES |
Supports drivers developed using DataDirect SDK | YES | NO |
Supports apps developed using DataDirect SDK | YES | NO |
OS default DM | ||
macOS | YES | NO |
Linux | partial | partial |
Unix-like | partial | partial |
OS support | ||
macOS | YES | partial |
Linux | YES | YES |
Unix-like | YES | YES |
User-friendly native GUI Administrator | ||
macOS | YES | Qt-based |
Linux | GTK-based and HTML-based | Qt-based |
Unix-like | GTK-based and HTML-based | Qt-based |
Thread Safe | YES | YES |
Support | ||
Mailing List(s) | YES | YES |
Forum(s) | YES | YES |
Github repository | YES | YES |
SourceForge repository | YES | YES |
Open Source Licensing | ||
GPL | NO | programs |
LGPL | YES | libraries |
BSD | YES | NO |
Notes
Unicode a/k/a Wide Characters
- iODBC supports and translates between all of UCS-2, UCS-4, UTF-8, UTF-16, UTF-32
- unixODBC follows MDAC, and
SQLWCHAR
s are 2 bytes UCS2 encoded
SDK lock-in
- iODBC supports applications and drivers developed using unixODBC SDK and DataDirect SDK as well as those developed using iODBC SDK
- unixODBC only supports applications and drivers developed using unixODBC SDK
Just so you know I use and have contributed to unixODBC and I don't use iODBC.
Unicode support
unixODBC follows MS ODBC Driver manager and has SQLWCHARs as 2 bytes UCS2 encoded. iODBC I believe uses wchar_t (this is based on attempting to support iODBC in DBD::ODBC)
cursor library
unixODBC has one, I don't "think" iODBC has.
application support
A lot of ODBC applications support unixODBC e.g., OpenOffice and ODBC drivers from Oracle, IBM and SAP. I'm not sure about iODBC.
OS support
iODBC has always been the most used on on Macs since Apple included it (although I believe it is removed from Lion). Both can be built from source and most Linux distributions package both (although not Novell/Suse which only distributes unixODBC).
thread safety
unixODBC is thread safe and includes flags to protect handles at different levels. This did not used to be the case with iODBC (but that might have changed now).
support
Both have support forums (unixODBC has 3) although I'd say the unixODBC ones are far more active (I'm on both).
Licensing
unixODBC is GPL and LGPL. iODBC is LGPL/BSD
In practice there is not a lot of difference but I think you'll find unixODBC is more widely used.