PHP, ODBC, and nvarchar

By  on  

I stumbled upon an odd error using PHP's ODBC functions to query a SQL Server 2005 database. I was doing a basic SELECT statement to get the description of something when I encountered the following error:

Warning: odbc_exec() [function.odbc-exec]: SQL error: [unixODBC][FreeTDS][SQL Server]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., SQL state in SQLExecDirect in /home/web/file.php on line 4

It turns out that the PHP ODBC functions have a hard time pulling "nvarchar" data. Here's the ugly solution to getting nvarchar data:

SELECT CAST(CAST([DetailedDescription] AS VARCHAR(8000)) AS TEXT) AS ad FROM mytable WHERE active = 1

Not pretty but making it function is what counts.

Recent Features

  • By
    Serving Fonts from CDN

    For maximum performance, we all know we must put our assets on CDN (another domain).  Along with those assets are custom web fonts.  Unfortunately custom web fonts via CDN (or any cross-domain font request) don't work in Firefox or Internet Explorer (correctly so, by spec) though...

  • By
    5 Awesome New Mozilla Technologies You’ve Never Heard Of

    My trip to Mozilla Summit 2013 was incredible.  I've spent so much time focusing on my project that I had lost sight of all of the great work Mozillians were putting out.  MozSummit provided the perfect reminder of how brilliant my colleagues are and how much...

Incredible Demos

  • By
    Do / Undo Functionality with MooTools

    We all know that do/undo functionality is a God send for word processing apps. I've used those terms so often that I think of JavaScript actions in terms of "do" an "undo." I've put together a proof of concept Do/Undo class with MooTools. The MooTools...

  • By
    Fade Images with MooTools LazyLoad

    I recently received an email from a MooTools developer asking a great question about my LazyLoad class: "I'm using your LazyLoad MooTools plugin (which is great, by the way). I have been trying to figure out how to modify it so that once an image scrolls into...

Discussion

  1. THANKS!!!
    muchas gracias.. ahora puedo seguir trabajando tranquilo.. justamante estaba teniendo problemas con un campo nvarchar.

  2. umberleigh

    Casting to varchar limits you to 8000 characters in a field.

    I found just casting to text works better, like so:

    print("SELECT CAST([column_name] AS TEXT) AS column_0 FROM table_name");
  3. Thanks , nice solve problem from sql server

  4. San

    Cast did the job ….

    Nice post !!!

  5. mohi

    not work!

    Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near ‘ASâ’. (severity 15) in /var/www/vhosts/fvc.ir/httpdocs/mssql.php on line 11

  6. Thank you very very much!
    And here is how to write value:
    http://stackoverflow.com/questions/7255703/utf-8-in-sql-server-2008-database-php

    $value = 'ŽČŘĚÝÁÖ';
    $value = iconv('UTF-8', 'UTF-16LE', $value); //convert into native encoding 
    $value = bin2hex($value); //convert into hexadecimal
    $query = 'INSERT INTO some_table (some_nvarchar_field)  VALUES(CONVERT(nvarchar(MAX), 0x'.$value.'))';
    
  7. thanks a lot. i was not shure what was the problem. In the sql management studio the data looks fine and in php is not. my first impresion was user rights for the data .. but after 1 hour of hair pulling :) i wandered if culd be the odbc … and like this i found your post

    thanks again

  8. Riyas

    Thanks for this solution. I was stuck at this problem and finally reached here

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!