This discussion is archived
1 Reply Latest reply: Aug 2, 2012 4:30 PM by Sergiusz Wolicki (Oracle) RSS

Issue with character set conversion using Oracle ODBC client

388387 Newbie
Currently Being Moderated
Hello All,

We are trying to migrate a 10g database from WE8ISO8859P1 to AL32UTF8 character set.

We have proceeded as follow :
* After running csscan and csalter, we have exported the content of the WE8ISO8859P1 database instance.
* We created as new instance using AL32UTF8 character set.
* We imported the data in the new instance.

The database is accessed by two kind of clients : a java application server and a legacy C++ software using ODBC connection.

The java application server works fine with the AL32UTF8 instance, however the C++ software fails.

Here are the details :
* Database 10g 10.2.0.4
* C++ software running with :
- Windows XP SP3
- Oracle ODBC Driver 10.02.00.01
- NLS_LANG set to FRENCH_FRANCE.WE8MSWIN1252

The C++ software fails with the message with the AL32UTF8 database instance : "[Oracle][ODBC]Syntax error or access violation"
It still works very well with the WE8ISO8859P1 database instance.

It looks like the Oracle ODBC Driver is not performing character set conversion.

Is there a complementary parameter to NLS_LANG that should be set ?
  • 1. Re: Issue with character set conversion using Oracle ODBC client
    Sergiusz Wolicki (Oracle) Expert
    Currently Being Moderated
    *## After running csscan and csalter*

    Did you really run csalter.plb? csalter.plb should not be run before a full-export A-to-B type of migration. On the other hand, if there were convertible data in the database, csalter.plb should have just reported an error and terminate without changing anything.

    *## "[Oracle][ODBC]Syntax error or access violation"*

    This error does not say much. Why do you think ODBC does no conversion?

    The conversion for the ODBC driver is performed by OCI to/from UTF-16 and it is independent of the NLS_LANG character set. If the C++ application is written in the ANSI mode (does not use wide character data types), Microsoft ODBC Manager will convert between the application and the Oracle ODBC driver, between system code page (Cp 1252) and UTF-16.


    -- Sergiusz

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points