RE: Unicode data w/PDO DBLIB, MSSQL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thank you both for the help.  I found that by using the odbc driver
included with PHP 5.1.6, I was able to access all of my data properly.
Also, Wez (@php.net) was able to fix a bug in the PDO ODBC driver which
caused the fields following large text fields to be empty, and it's
included in the CVS as of last night.  Thanks for the quick responses
and fix!

-----Original Message-----
From: Vincent DUPONT [mailto:Vincent.dupont@xxxxxxx] 
Sent: Tuesday, October 10, 2006 4:14 PM
To: Frank M. Kromann; Mike Matz
Cc: aspen.olmsted@xxxxxxxxxxxx; php-windows@xxxxxxxxxxxxx
Subject: RE:  RE: SPAM-LOW: [PHP-WIN] Unicode data w/PDO DBLIB,
MSSQL

Hello,

Sorry for this late answer. I hope I can help

I have use ODBTP, an open source ODBC service. It is free and quite easy
to install (3 step procedure to follow)
In MSSQL 2000, my unicode fields need to be nvarchar (not varchar) or
ntext (not text)
(nxxx stands for binary; unicode is a binary, not a standard char or
varchar. Note that you cannot do queries as 'like %%' on nvarchar
fields)

Select into the database are so simple as usual! If you select a nvachar
field, you get it as unicode.
For inserting values (inserts or updates) I used stored procedures whith
N in front of the parameters. For example :
"exec sp_insertSomeUnicode ?,N?,N?"
With values like 1, 'some text', 'some text'

The N construct is something that comes from MSSQL itself.
My pages are in UTF8 charset


Hope this helps
Mail me if needed

vincent

-----Original Message-----
From: Frank M. Kromann [mailto:frank@xxxxxxxxxxxx] 
Sent: mardi 10 octobre 2006 1:37
To: Mike Matz
Cc: aspen.olmsted@xxxxxxxxxxxx; php-windows@xxxxxxxxxxxxx
Subject: Re:  RE: SPAM-LOW: [PHP-WIN] Unicode data w/PDO DBLIB,
MSSQL

The mssql extension comes in two different versions on Win32 systems.

php_mssql.dll and php_pdo_mssql.dll are compiled and linked with
ntwdblib from Microsoft

php_dblib.dll and php_pdo_dblib.dll are compiled and linked with
FreeTDS.

The FreeTDS versions uses a more recent version of the protocol and
allows handling of unicode data as well as removing the 255 char limit
on char and varchar columns.

- Frank

> Does ADOdb MSSQL driver solve this problem whereas the standard 
> mssql_* functions don't?  I thought ADOdb was just an abstraction 
> layer, but perhaps there are some different mechanisms or settings it 
> uses that resolve the issue I'm having?
> 
> ________________________________
> 
> From: Aspen Olmsted [mailto:aspen.olmsted@xxxxxxxxxxxx]
> Sent: Monday, October 09, 2006 12:55 PM
> To: Mike Matz; php-windows@xxxxxxxxxxxxx
> Subject: re: SPAM-LOW:  Unicode data w/ PDO DBLIB, MSSQL
> 
> 
> I think I have reported the problem you are having with the odbc and
pdo
> and sql server under bug 38834.
> http://bugs.php.net/bug.php?id=38834
> 
> It should up to me with large columns of text but my guess is the
same.
> 
> As a temporary solution I am using adodb with sql server but there is 
> a bug with time zones which I have a modified version of adbdb if you
want
> it.
> 
> Aspen Olmsted
> Alliance Software Corporation
> 17 Pitt St
> Charleston SC, 29401
> aspen.olmsted@xxxxxxxxxxxx
> 
> 
> ________________________________
> 
> From: "Mike Matz" <mmatz@xxxxxxxxxxxxx>
> Sent: Monday, October 09, 2006 12:48 PM
> To: php-windows@xxxxxxxxxxxxx
> Subject: SPAM-LOW:  Unicode data w/ PDO DBLIB, MSSQL
> 
> Is there currently any way to retrieve Unicode data from SQL Server?
> I'm working with SQL Server Express 2005, on a database that's been 
> restored from an old SQL Server 2000 database. I'm writing a PHP 
> script that imports data from the MSSQL database, processes it, and 
> adds it to a MySQL database with a different schema. So far I've been 
> unable to do this reliably, as there is a lot of multilingual, Unicode

> data in the MSSQL database. I'm trying to use the PDO method of 
> database access, but could fall back on another method if this is 
> impossible. I'm able to connect to my database using either ODBC or
DBLIB MSSQL drivers.
> When using DBLIB, I get an error:
> 
> $db = new PDO('mssql:host=\\\\.\pipe\sql\query;dbname=my_db', $user, 
> $pass); $sth = $db->execute("SELECT * FROM Products"); 
> $sth->execute(); print_r($sth->fetchAll());
> 
> gives me this exception:
> 
> Fatal error: Uncaught exception 'PDOException' with message
> 'SQLSTATE[HY000]: General error: 10007 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. [10007] (severity 5)
[(null)]'
> 
> When using ODBC, I get very strange results. There are no errors or 
> exceptions, but in every row, all columns following the first 
> text/unicode column will be empty. For example, if I SELECT 
> Product_ID, Short_Description, Product_Season (Short_Description being

> TEXT, possibly with unicode), Product_Season will be empty. However, 
> if I SELECT Product_ID, Product_Season, Short_Description -- I'll get 
> the Product_Season. Short_Description is empty in both cases (even if 
> it's not empty when viewing with SQL Query Analyzer).
> 
> Has anyone seen this behavior or have any ideas as to what I should
try?
> 
> Thanks,
> Mike
> 
> 
> 
> 

--
PHP Windows Mailing List (http://www.php.net/) To unsubscribe, visit:
http://www.php.net/unsub.php

-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux