powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NLS_LANG и ORA-29275
25 сообщений из 32, страница 1 из 2
NLS_LANG и ORA-29275
    #39349840
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема такая - добавляю русский текст в юниксе из sqlplus, потом читаю его там же - всё нормально.
Делаю выборку в винде, или в win-приложении, которое работает с этими данными - либо ORA-29275 либо кракозябры.

И наоборот - добавляю в винде, в ней же читаю - все ОК, и приложения в этом случае видят русский.
Что делаю не так?
Мне надо чтобы insert'ы с русским из unix-sqlplus были читабельны в винде.

В базе NLS_NCHAR_CHARACTERSET = AL16UTF16


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Linux
NLS_LANG= AMERICAN_AMERICA.AL32UTF8

Unix locale
LANG=en_US.UTF8
LC_CTYPE="en_US.UTF8"
LC_NUMERIC="en_US.UTF8"
LC_TIME="en_US.UTF8"
LC_COLLATE="en_US.UTF8"
LC_MONETARY="en_US.UTF8"
LC_MESSAGES="en_US.UTF8"
LC_PAPER="en_US.UTF8"
LC_NAME="en_US.UTF8"
LC_ADDRESS="en_US.UTF8"
LC_TELEPHONE="en_US.UTF8"
LC_MEASUREMENT="en_US.UTF8"
LC_IDENTIFICATION="en_US.UTF8"
LC_ALL=

/> sqlplus  tstusr/tstusr@pet1crm

SQL> insert into T1 values ('Ноябрь');
1 row created.

SQL> commit;
Commit complete.

SQL> select * from t1;

NAME
------------------------------
Ноябрь



Проверяю результат в винде с AMERICAN_AMERICA.CL8MSWIN1251, и получаю ORA-29275 или кракозябры для другого текста:

Код: plsql
1.
2.
3.
4.
select * from t1
                       *
Error at line 1
ORA-29275: partial multibyte character
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраNLS_NCHAR_CHARACTERSET = AL16UTF16

Это для NCHAR. А поле в таблице t1 какого типа?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349848
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраВ базе NLS_NCHAR_CHARACTERSET = AL16UTF16Не то.
БораОра
Код: plsql
1.
insert into T1 values ('Ноябрь');

Не N-литерал.
БораОра
Код: plsql
1.
ORA-29275: partial multibyte character

Тип столбца?
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349852
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл указать:
Код: sql
1.
2.
3.
nls_length_semantics	      BYTE
и
NLS_CHARACTERSET	       AL32UTF8



Ну и для полной информации:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select * from nls_database_parameters

PARAMETER	VALUE
NLS_CALENDAR	GREGORIAN
NLS_CHARACTERSET	AL32UTF8
NLS_COMP	BINARY
NLS_CURRENCY	$
NLS_DATE_FORMAT	DD-MON-RR
NLS_DATE_LANGUAGE	AMERICAN
NLS_DUAL_CURRENCY	$
NLS_ISO_CURRENCY	AMERICA
NLS_LANGUAGE	AMERICAN
NLS_LENGTH_SEMANTICS	BYTE
NLS_NCHAR_CHARACTERSET	AL16UTF16
NLS_NCHAR_CONV_EXCP	FALSE
NLS_NUMERIC_CHARACTERS	.,
NLS_RDBMS_VERSION	12.1.0.2.0
NLS_SORT	BINARY
NLS_TERRITORY	AMERICA
NLS_TIMESTAMP_FORMAT	DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT	DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT	HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT	HH.MI.SSXFF AM TZR
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349854
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняйте, вот делаю в линуксе:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> create table  T1(name varchar2(30));

Table created.


SQL> insert into T1 values ('Ноябрь');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1;

NAME
------------------------------
Ноябрь



И получаю ошибку или кракозябры в винде при чтении.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349878
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраИ получаю ошибку или кракозябры в винде при чтении.

Проверь с помощью DUMP() что именно лежит в поле. Сравни с правильными кодами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349889
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
из Линукса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> create table  t3(id number(5), name varchar(90));

Table created.

SQL> insert into T3 values(1,'Ноябрь');

1 row created.

SQL> commit;

Commit complete.



Из винды
Код: plsql
1.
insert into T3 values(2,'Ноябрь');



Результат с dump, вторая(правильная?) строка была добавлена из винды):
Код: sql
1.
2.
3.
ID	DUMP(NAME)
1	Typ=1 Len=6: 205,238,255,225,240,252
2	Typ=1 Len=12: 208,157,208,190,209,143,208,177,209,128,209,140
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349896
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраРезультат с dump, вторая(правильная?) строка была добавлена из винды):

Значит в линуксе у тебя локаль не utf-8 как ты утверждаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349900
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как проверить?
Может файлы заменены какие-то?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
> echo $LANG
en_US.UTF-8

> locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349906
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраА как проверить?
Ну, лично у меня для этого есть файл, содержащий строки в разных кодировках. Какая
отображается правильно, такая локаль и установлена.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349911
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно попросить этот файл через какой-нибудь файло-обменник?
Тут RHEL 6.5.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349915
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот еще, что интересно - в sqlplus когда переключаюсь на русский - русские символы печатаются,
когда делаю тоже самое в юникс-шеле - ничего не печатается, пока не переключусь на английский.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349932
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраА как проверить?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
> echo $LANG
en_US.UTF-8

> locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
...LC_IDENTIFICATION="en_US.UTF-8"
===>LC_ALL=


Правильный вывод locale не такой.
Не установлена локаль в линухе. Работаете с "C" - при этом NLS_LANG установили равным серверному - отсюда все проблемы.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349981
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей, большое спасибо за подсказку....

RHEL 6.5
Поменял файл:
Код: plsql
1.
2.
3.
4.
/etc/sysconfig/i18n
LANG="ru_RU.UTF-8"
SUPPORTED="ru_RU.UTF-8:ru_RU:ru"
SYSFONT="latarcyrheb-sun16"



Под рутом локаль показывает ru и дает набирать русский текст.

~]# йффыыыыывыввцъхззжqwqwqa
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=



Но вот что мне не нравится, системные сообщения идут на абракадабре.
Что сделать, чтобы они остались на английском? -
Код: plsql
1.
2.
~]# cd gggh
-bash: cd: gggh: Нет такого файла или каталога



Далее, под обычным пользователем переключение языка в шеле не срабатывает почему-то.
И еще, можно ли как-то установить локаль для конкретного пользователя, а не для всей системы?
И чтобы системные сообщения шли на английском?
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39349999
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраможно попросить этот файл через какой-нибудь файло-обменник?

В аттаче.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350033
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
[oracle@ODIGettingStarted ~]$ locale -a | grep ru 
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
[oracle@ODIGettingStarted ~]$ export LC_ALL=ru_RU.koi8r
[oracle@ODIGettingStarted ~]$ export NLS_LANG=.CL8KOI8R
-- переключаем терминалку на KOI8R
[oracle@ODIGettingStarted ~]$ sqlplus test/test

SQL*Plus: Release 11.2.0.4.0 Production on Fri Nov 18 09:38:35 2016
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> insert into test_nls(a) values('Съешь-ка ещё этих мягких французских булочек да выпей чаю');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test_nls;

A
--------------------------------------------------------------------------------
Съешь-ка ещё этих мягких французских булочек да выпей чаю

SQL> quit

[oracle@ODIGettingStarted ~]$ export LC_ALL=ru_RU.iso88595
[oracle@ODIGettingStarted ~]$ export NLS_LANG=.CL8ISO8859P5
-- переключаем терминалку на ISO8859-5
[oracle@ODIGettingStarted ~]$ sqlplus test/test

SQL*Plus: Release 11.2.0.4.0 Production on Fri Nov 18 09:40:37 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from test_nls;

A
--------------------------------------------------------------------------------
Съешь-ка ещё этих мягких французских булочек да выпей чаю

SQL> quit

[oracle@ODIGettingStarted ~]$ export LC_ALL=en_US.utf8 
[oracle@ODIGettingStarted ~]$ export NLS_LANG=.AL32UTF8
-- переключаем терминалку на UTF-8
[oracle@ODIGettingStarted ~]$ sqlplus test/test

SQL*Plus: Release 11.2.0.4.0 Production on Fri Nov 18 09:42:19 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from test_nls;

A
--------------------------------------------------------------------------------
Съешь-ка ещё этих мягких французских булочек да выпей чаю

SQL> 
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350036
БораТора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Спасибо за файл - в FAR проверил по F9 - всё срабатывает одна строка отображается в каждой кодировке.

А вот в юниксе как и предполагалось ....
Код: sql
1.
2.
3.
4.
cp866:  ¡¢£¤¥
win1251: àáâãäå
utf-8: абвгде
koi8: ÁÂ×ÇÄÅ


Это в исходной версии, с правильной локалью сейчас не могу проверить.
Надо разобраться, чтобы системные сообщения линукса нормально шли,
и желательно локаль не на весь сервер менять если возможно.
Или хотя бы чтобы системные сообщения шли на английском.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350040
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораТораА вот в юниксе как и предполагалось ....
Кодировку терминала меняли?
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350055
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораТораА вот в юниксе как и предполагалось ....

Ты, похоже, не за физической консолью сидишь. Настраивай программу терминала.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350064
БораТора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей, спасибо за наводки, теперь проще проверять .....

Сейчас проверю кодировку программы - SecureCRT - вот я олень ....

У меня ощущение,
что в SQLPLUS в линуксе кодировка живет своей жизнью.
Ведь при US кодировке в SQLPLUS срабатывает переключение на "какой-то" русский.
Т.е. всё набирается, но вот что идет в базу ...
При этом в шеле вообще ничего не набирается при US....

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
> export LC_ALL=ru_RU.koi8r
> export NLS_LANG=.CL8KOI8R

> locale
LANG=en_US.UTF-8
LC_CTYPE="ru_RU.koi8r"
LC_NUMERIC="ru_RU.koi8r"
LC_TIME="ru_RU.koi8r"
LC_COLLATE="ru_RU.koi8r"
LC_MONETARY="ru_RU.koi8r"
LC_MESSAGES="ru_RU.koi8r"
LC_PAPER="ru_RU.koi8r"
LC_NAME="ru_RU.koi8r"
LC_ADDRESS="ru_RU.koi8r"
LC_TELEPHONE="ru_RU.koi8r"
LC_MEASUREMENT="ru_RU.koi8r"
LC_IDENTIFICATION="ru_RU.koi8r"
LC_ALL=ru_RU.koi8r

> sqlplus  test/test@tstdb

SQL> insert into t3 values(5,'Помидоры');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t3;

 5
Помидоры





Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
> export LC_ALL=en_US.utf8
> export NLS_LANG=.AL32UTF8
> locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8

> sqlplus  test/test@tstdb

SQL> select * from t3;

         5
оНЛХДНПШ




From windows PLSQLDeveloper
Код: plsql
1.
2.
3.
select * from t3;
         5
оНЛХДНПШ              
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350068
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Среди них есть 1251?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
locale -a | grep ru 
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian
ru_UA
ru_UA.koi8u
ru_UA.utf8


Просто будут файлы с винды, и хотелось бы их видеть нормально в линуксоидном sqlplus.
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350076
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В SecureCRT стоит кодировка Default при этом после установки кои8 можно набирать русский текст в шеле:

Код: plsql
1.
2.
3.
4.
> export LC_ALL=ru_RU.koi8r
> export NLS_LANG=.CL8KOI8R

> ййццццqqwwee   
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350077
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В SecureCRT стоит кодировка Default при этом после установки кои8 можно набирать русский текст в шеле:

Код: plsql
1.
2.
3.
4.
> export LC_ALL=ru_RU.koi8r
> export NLS_LANG=.CL8KOI8R

> ййццццqqwwee   
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350081
БораОра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я может не с того начал....

С этого сервера будет идти DML из SQLPLUS в файлах с винды, в 1251.
Т.е., чтобы SELECT c винды потом показал русский текст,
NLS_LANG в линуксе должен быть 1251, если я всё правильно понимаю.
Это решит вопрос отображения и в линуксе и винде.
Соответствовать NLS_LANG должна и линуксоидная локаль.

Как настроить линукс для такой задачи?
...
Рейтинг: 0 / 0
NLS_LANG и ORA-29275
    #39350083
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БораОраС этого сервера будет идти DML из SQLPLUS в файлах с винды, в 1251.nls_lang должен соответствовать содержимому файлов.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NLS_LANG и ORA-29275
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]