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 ?
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.