PHP, ODBC, and nvarchar
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.
![Chris Coyier’s Favorite CodePen Demos]()
David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...
![Convert XML to JSON with JavaScript]()
If you follow me on Twitter, you know that I've been working on a super top secret mobile application using Appcelerator Titanium. The experience has been great: using JavaScript to create easy to write, easy to test, native mobile apps has been fun. My...
![Jack Rugile’s Favorite CodePen Demos]()
CodePen is an amazing source of inspiration for code and design. I am blown away every day by the demos users create. As you'll see below, I have an affinity toward things that move. It was difficult to narrow down my favorites, but here they are!
![Spoiler Prevention with CSS Filters]()
No one likes a spoiler. Whether it be an image from an upcoming film or the result of a football match you DVR'd, sometimes you just don't want to know. As a possible provider of spoiler content, some sites may choose to warn users ahead...
THANKS!!!
muchas gracias.. ahora puedo seguir trabajando tranquilo.. justamante estaba teniendo problemas con un campo nvarchar.
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");Thanks , nice solve problem from sql server
Cast did the job ….
Nice post !!!
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
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.'))';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
Thanks for this solution. I was stuck at this problem and finally reached here