Comment 5 for bug 1319701

Revision history for this message
Nick Gorham (nifk) wrote :

Can I add a bit of history to this (with my unixODBC hat on). The default SQLLEN for 64 bit platforms changed with the 2.3.0 release of unixODBC, (20th April 2010) from 32 bit to 64 bit. The version number also changed from 1 to 2 to reflect this API change.

A lot of distributions were slow to upgrade their version of unixODBC (Debian changed some time ago, and most are now following or have already done so). Ubuntu has changed in utopic to 2.3.1 as the base which has 64 as the default SQLLEN. Before that the base was 2.2.14 which was released 19th November 2008.

But other than unixODBC versions which may be manageable because of the library version change, the real problem is the driver. Even if by some convoluted manner you had one module linked against libodbc.so.1 and the other libodbc.so.2, if they both wanted to use the same ODBC driver, then you would hit the same problem there.

When I released 2.3.0 it was my hope that driver writers would use it as a opportunity to change from 32 to 64 bit SQLLEN and the problem would just disappear over time. This has happened and most drivers are 64 bit SQLLEN. But any attempt to fix this in PHP in a way that will also just work for older installation will be (IMHO) problematic.

Also FYI, the original cause of the 32/64 problem was Microsoft changing their mind about the size of SQLLEN.