I had to connect to a SQL Server database from a PHP script earlier, and I came across an error I wasn’t expecting.
My SQL was working fine, until I tried to select one particular column, it would then give me a 4004 error. Other columns in this table worked fine, so I investigated more.
The error string returned with the 4004 error code was “Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.”
Looking at the table definition, the column I was trying to SELECT was of type ntext. This is used to hold UTF-8 data.
By default the driver I had installed for PHP on Ubuntu Linux using
apt-get install php5-sybase
couldn’t understand this UTF-8 data. The solution is to edit the conf file used by freetds, which is the code used to talk to the SQL Server database by the PDO DBLib library.
So, in /etc/freedts/freetds.conf
I added these settings
[global] tds version = 8.0 client charset = UTF-8
After adding those settings, I was successfully able to SELECT
the ntext column from the SQL Server database.
This article is a life saver when you are trying to connect a Linux devbox with a MSSQL database and getting the 4004 error. I searched for ages trying to understand this issue. Solved in seconds with this article. Rob = Legend! 🙂