Posted on 2013-11-01
Last Modified: 2013-12-13
I am trying to set NLS_LANG setting to POLISH_POLAND.EE8PC852 in a batch file. The batch file further executes sql files as under

sqlplus username/password@sid @SetLang.sql

Open in new window

SetLang.sql updates some tables in my database. When I call this bat file the special characters do not get updated in my database but when I execute the same sql from sqldeveloper they get updated.

Where am I going wrong?
Question by:jim_imtech
  • 3
  • 3

Expert Comment

by:Greg Clough
ID: 39616457
What format is the SetLang.sql file in?  I'm presuming that your database is in EE8PC852 character set, but is the SQL file in the same format... or is it in UTF-8?

Remember, you need to set the NLS_LANG to match the "client", not the "database".

Alternatively, it appears you're using csh.  Have you tried using "setenv"?


Open in new window

If you could give a dump of the SQL file (using "od"), and of the database rows (using "dump(YOUR_COLUMN_HERE,1016)") that would be helpful.

Author Comment

ID: 39616479
My sql file has simple update statements

update TBLDETECTOR_TYPEID set typedescription = 'Predkosc' where typedescription = 'Speed';


Open in new window

Please note the special characters in 'Predkosc' are removed....

The database column shows Pr¦Ödko+T¦ç
Using setenv  has the same result

Author Comment

ID: 39616487
You are right. My sql file is in UTF-8. Is that the issue? How can I save it in EE8PC852 using notepad or Notepad++?
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.


Expert Comment

by:Greg Clough
ID: 39617126
If you set your NLS_LANG thus:


Open in new window

Then Oracle will know that the file you are loading is UTF-8, and convert it to whatever character set the database is using... in this case EE8PC852.  There is a very common misconception that you need to set your NLS_LANG to match your database, but that is dangerously wrong.  Always set your NLS_LANG to match the client that's connecting to the database and let the magic of TNS character set translation sort the conversion for you.

If the character set of your client is set to match your database, then Oracle presumes there is no character translation required and loads whatever you feed it directly into the database... thus you're getting UTF-8 data in your database, but when it's read back the database is presuming it's EE8PC852.  This type of corruption is difficult if not impossible to reverse.

NOTE: I'm presuming you're on v10 or v11 of Oracle as their UTF-8 character set is AL32UTF8, as otherwise if you're on v9 or earlier then I'll have to google to remember what it was.

Author Comment

ID: 39624400
I am running this script from SQLPLus and looking at the link there is no setting of AL32UTF8 for Dos.

I still tried it but I get SP2-0734 error. Basically sqlplus finds junk characters around my sql. Any suggestions?

I am using Oracle 11.2

Accepted Solution

Greg Clough earned 500 total points
ID: 39629051
That URL points to a v9.2 document, and I believe that the availability of Windows Codepages has moved on quite a lot on Windows since those days.

As far as I'm aware, even if your version of Windows doesn't support UTF-8, so long as the file is actually encoded in UTF-8 and you have your NLS_LANG set correctly, then Oracle will read and process the file as a UTF-8 file and do character set translation so that it gets inserted into your database correctly.

Again, not being a windows guy I can only suggest that you follow the advice from here:

Which basically says to run the "set" command in your CMD window prior to starting sqlplus.  It should be able to make this persistent by setting the Registry Key to the correct value.  You should search for "NLS_LANG" underneath:


Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Need help with Oracle syntax 4 56
Oracle - Query Insert and Update multiple tables 5 57
Need a replacement data type in Oracle 6 64
Oracle Public Synonyms and Privileges 2 50
Cursors in Oracle: A cursor is used to process individual rows returned by database system for a query. In oracle every SQL statement executed by the oracle server has a private area. This area contains information about the SQL statement and the…
Background In several of the companies I have worked for, I noticed that corporate reporting is off loaded from the production database and done mainly on a clone database which needs to be kept up to date daily by various means, be it a logical…
This video shows setup options and the basic steps and syntax for duplicating (cloning) a database from one instance to another. Examples are given for duplicating to the same machine and to different machines
This video shows how to recover a database from a user managed backup

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now