powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не могу инсертить юникод(кириллицу) из программы в базу
48 сообщений из 48, показаны все 2 страниц
не могу инсертить юникод(кириллицу) из программы в базу
    #39698084
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть в некоей колонке (типа nvachar2!) уже занесённая туда килиррица в юникоде (AL16UTF16)

Код: plsql
1.
2.
3.
4.
5.
select x, ascii( x ), convert(x, 'AL16UTF16' ), ascii( convert(x, 'AL16UTF16') )
  from 
( ... ) 
--
Й	1049	Й	1049


в TOAD-е однако вот такая фигня:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select ascii( 'Й' ), UNISTR( 'Й' ), ascii( UNISTR( 'Й' ) ) from dual
--
191	¿	191

select * from nls_database_parameters
--
NLS_CHARACTERSET	WE8ISO8859P15



ни из тода ни из ява-программы:

Код: java
1.
 insert into .....values ....  convert( '" + (String) globalMap.get( "gFileName" ) + "' , 'AL16UTF16')  ...



инсертить кириллицу не получается! :-(
Где грабли?
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698096
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik
Код: java
1.
convert



инсертить кириллицу не получается! :-(
Где грабли?
Здесь
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698317
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousDBAshnik
Код: java
1.
convert



инсертить кириллицу не получается! :-(
Где грабли?
Здесь

не понимаю в чём именно! Вроде всё прочитал, убедился что это именно вставляется неправильно - т.п. перевёрнутые знаки вопроса вместо кириллицы:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select  zh, --unistr( zh ), 
length(zh), lengthB(zh)  -- ¿	1	2   --(похоже UNICODE!!!)
, ascii( zh )  
, dump( zh )  
from 
(  ... )
--
¿	1	2	191	Typ=1 Len=2: 0,191



а если в инсерте вставлять юникод кириллицы то он потом правильно и считывается:

Код: plsql
1.
2.
3.
4.
5.
insert into ... ', nchr(1046) || '" + (String) globalMap.get( "gFileName" ) + "

select ... (см выше)
--
Ж	1	2	1046	Typ=1 Len=2: 4,22



сама себе ява строка (gFileName) правильна. Это видно по тому, как этот файл (с кириллицей в имени) без проблем переноситься (move!) в другой каталог!

Вообщем как правильно сделать в инсерте, поясните пожалуйста!
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698598
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
люди добрые! Ну подскажите хоть как конвертнуть обычную (не-юникод) букву "Й" в юникод:

Код: plsql
1.
2.
3.
SELECT ASCII( N'Й' ) FROM DUAL --191
  
SELECT NCHR('1049'), ASCII( NCHR('1049') ) FROM DUAL;  --  Й	1049



чтоб в итоге ASCII давала 1049 а не 191! :-(

о большем пока даже и не прошу!
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698614
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikбукву "Й"Да не парься. Если после латиницей икс X и игрек Y вместо Й напишешь знак типа решетки #, то все и так поймут.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698615
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-DBAshnikбукву "Й"Да не парься. Если после латиницей икс X и игрек Y вместо Й напишешь знак типа решетки #, то все и так поймут.

не смешно! Я реально тут засоитовался уже с этой проблемой. :-( Можешь помочь?
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698617
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik
чтоб в итоге ASCII давала 1049 а не 191! :-(


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> ed
Wrote file afiedt.buf

  1* select ascii(N'Й') from dual
SQL> /

ASCII(N'Й')
-----------
       1049



.....
stax
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698622
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у меня вот такая байда:

Код: plsql
1.
2.
3.
4.
5.
6.
select ascii(N'Й') from dual

ASCII(N'¿')
-----------
        191
1 row selected.



это в TOAD-е что то настроить?
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698623
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. форум автоматически переделал перевернутый вопросительный знак в '¿'
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698624
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikP.S. форум автоматически переделал перевернутый вопросительный знак в '¿'

чёрт! А теперь наоборот! Хрен ногу сломит с этими кодировками! :-(
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698625
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikP.S. форум автоматически переделал перевернутый вопросительный знак в '¿'

в ... 191 короче
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698639
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik,
NLS_LANG какой?
Какая Версия клиента/сервера?
Код: 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.
d:\tmp>chcp 1251
Текущая кодовая страница: 1251

d:\tmp>set NLS_LANG=.CL8MSWIN1251

d:\tmp>echo select ascii(N'Й') from dual;|sqlplus -s scott/tiger@localhost/orcl

ASCII(N'Й')
-----------
       1049

d:\tmp>chcp 65001
Active code page: 65001

d:\tmp>set NLS_LANG=.UTF8

d:\tmp>echo select ascii(N'Й') from dual;|sqlplus -s scott/tiger@localhost/orcl

ASCII(N'Й')
-----------
       1049


d:\tmp>set NLS_LANG=.US7ASCII

d:\tmp>echo select ascii(N'Й') from dual;|sqlplus -s scott/tiger@localhost/orcl

ASCII(N'??')
------------
       65533


d:\tmp>set NLS_LANG=.We8ISO8859P1

d:\tmp>echo select ascii(N'Й') from dual;|sqlplus -s scott/tiger@localhost/orcl

ASCII(N'Й')
------------
         208
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698642
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В "Oracle SQL Developer"-е всё нормально, кстати! (возвращает сразу 1049)
Мерзкий TOAD! :-(
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698643
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik
в ... 191 короче
Код: plsql
1.
2.
3.
4.
5.
6.
  1* SELECT UNISTR('\0419'),ascii(UNISTR('\0419')) from dual
SQL> /

U ASCII(UNISTR('\0419'))
- ----------------------
Й                   1049



.....
stax
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698649
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin,

Спасибо!

NLS_LANGUAGE GERMAN
NLS_NCHAR_CHARACTERSET AL16UTF16

Клиент и сервер: Oracle 11g



а без изменений в операционке (chcp 65001) это никак не сделать, а? (как нибудь через ALTER SESSION юникод поставить!)
Ведь "ORACLE SQL Developer" это умеет. А Toad и (самое главное!) Java-фремворк (Talend) похоже нет! (я как минимум пока не нашёл!)
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698650
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сервере:

Код: plsql
1.
2.
SQL> host echo $NLS_LANG
american_america.we8iso8859p15
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698653
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на клиенте (т.е. на моём Window-PC) NLS_LANG не проставлена, кстати!!! Может в этом проблема!?!?
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698666
Фотография 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.
-- Готовим табличку
SQL> select * from nls_database_parameters p where parameter like 'NLS_NCHAR_CHARACTERSET';
PARAMETER              VALUE
---------------------- ---------
NLS_NCHAR_CHARACTERSET AL16UTF16

SQL> create table dropme_t(cs varchar2(10), v nvarchar2(10));
Table created

SQL> desc dropme_t
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CS                                                 VARCHAR2(10)
 V                                                  NVARCHAR2(10)

------------ Упражнение номер раз -----------------
C:\>chcp 866
Текущая кодовая страница: 866

C:\>set nls_lang=.ru8pc866

C:\>sqlplus /nolog

SQL> conn ...
Connected.

SQL> insert into dropme_t values('cp866','Й');
1 row created.

SQL> commit;
Commit complete.

SQL> quit

------------ Упражнение номер два -----------------
C:\>chcp 1251
Текущая кодовая страница: 1251

C:\>set nls_lang=.cl8mswin1251

C:\>sqlplus /nolog
SQL> conn ...
Connected.

SQL> insert into dropme_t values('cp1251','Й');
1 row created.

SQL> commit;
Commit complete.

------------ Упражнение номер три -----------------
SQL> col dv format a40
SQL> select cs, v, dump(v,1016) dv from dropme_t;

CS         V          DV
---------- ---------- ----------------------------------------
cp866      Й          Typ=1 Len=2 CharacterSet=AL16UTF16: 4,19
cp1251     Й          Typ=1 Len=2 CharacterSet=AL16UTF16: 4,19

------------ Апплодисменты -----------------
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698667
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikА на клиенте (т.е. на моём Window-PC) NLS_LANG не проставлена, кстати!!! Может в этом проблема!?!?

поставил у себя в Виндах NLS_LANG = GERMAN_GERMANY.AL16UTF16
(как, кстати, узнать: валидное ли это значение??)

Перезапустил винды. Хрен там был! Всё те же проблемы!!! :-( :-( :-(
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698668
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikМожет в этом проблема!?!?
Проблема - в отсутствии базовых представлений о механизмах Globalization Support в оракеле.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698672
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik
(как, кстати, узнать: валидное ли это значение??)



V$NLS_VALID_VALUES

.....
stax
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698674
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikпоставил у себя в Виндах NLS_LANG = GERMAN_GERMANY.AL16UTF16
(как, кстати, узнать: валидное ли это значение??)
Мсье копает не в ту сторону .
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698880
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousDBAshnikМожет в этом проблема!?!?
Проблема - в отсутствии базовых представлений о механизмах Globalization Support в оракеле.

обоснуй, пожалуйста? В чём конкретно это отсутствие? В том, что NLS_LANG не имеет отношения к nvarchar2, nclob и т.п. Ну это понятно, но проблема то ещё _ДО_(!) вставки в nvarchar2-поле! (в Java/Client) И я пытаюсь понять, как настройки Oracle-client _возможно_ на это влияют!

P.S. и, кстати, что меня Вадим про "NLS_LANG какой" зря спросил, получается? ;-)
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698885
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikandrey_anonymousпропущено...

Проблема - в отсутствии базовых представлений о механизмах Globalization Support в оракеле.

обоснуй, пожалуйста? В чём конкретно это отсутствие? В том, что NLS_LANG не имеет отношения к nvarchar2, nclob и т.п. Ну это понятно, но проблема то ещё _ДО_(!) вставки в nvarchar2-поле! (в Java/Client) И я пытаюсь понять, как настройки Oracle-client _возможно_ на это влияют!

P.S. и, кстати, что меня Вадим про "NLS_LANG какой" зря спросил, получается? ;-)
Не совсем :)

Почувствуйт разницу:
Код: plsql
1.
2.
SELECT UNISTR('\0419') ...
SELECT ASCII(N'Й') ...



В первом случае, входная строка преобразуется по правилам преобразования NLS, во втором нет
Именно поэтому разница в результате 21666001
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698886
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninDBAshnikпропущено...


обоснуй, пожалуйста? В чём конкретно это отсутствие? В том, что NLS_LANG не имеет отношения к nvarchar2, nclob и т.п. Ну это понятно, но проблема то ещё _ДО_(!) вставки в nvarchar2-поле! (в Java/Client) И я пытаюсь понять, как настройки Oracle-client _возможно_ на это влияют!

P.S. и, кстати, что меня Вадим про "NLS_LANG какой" зря спросил, получается? ;-)
Не совсем :)

Почувствуйт разницу:
Код: plsql
1.
2.
SELECT UNISTR('\0419') ...
SELECT ASCII(N'Й') ...



В первом случае, входная строка преобразуется по правилам преобразования NLS, во втором нет
Именно поэтому разница в результате 21666001
Пардон наоборот
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698891
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin

P.S. и, кстати, что меня Вадим про "NLS_LANG какой" зря спросил, получается? ;-)
Не совсем :)



дык это ирония была! )) Я верю, что ты не зря спросил!

Повис важный вопрос пока:
NLS_LANG = GERMAN_GERMANY.AL16UTF16
(как, кстати, узнать: валидное ли это значение??)
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698895
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikПовис важный вопрос пока:
NLS_LANG = GERMAN_GERMANY.AL16UTF16
(как, кстати, узнать: валидное ли это значение??) Чукча не читатель? 21666085
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698935
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicDBAshnikПовис важный вопрос пока:
пропущено...
Чукча не читатель? 21666085

ах, да! Сорри! Спасибо! Получается, что валидное!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--//check GERMAN_GERMANY.AL16UTF16
select * from V$NLS_VALID_VALUES where ( value like 'GERM%' or  value like 'AL16UTF16' ) and IsDeprecated = 'FALSE' 

--
LANGUAGE	GERMAN	FALSE
LANGUAGE	GERMAN DIN	FALSE
TERRITORY	GERMANY	FALSE
CHARACTERSET	AL16UTF16	FALSE
SORT	GERMAN	FALSE
SORT	GERMAN_DIN	FALSE
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698940
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousDBAshnikпоставил у себя в Виндах NLS_LANG = GERMAN_GERMANY.AL16UTF16
(как, кстати, узнать: валидное ли это значение??)
Мсье копает не в ту сторону .

а в какую надо?
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698944
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikа в какую надо?

В сторону Oracle Globalization Guide. Правила перекодировки не так просты как могут
показаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698953
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDBAshnikа в какую надо?

В сторону Oracle Globalization Guide. Правила перекодировки не так просты как могут
показаться.


а можно по-конкретнее, пожалуйста! Если сам в курсе, конечно.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698962
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё я загнал в JDBC-настройку Java-коннектора (в Talend-проекте) значение: "useUnicode=true&characterEncoding=AL16UTF16"
Но воз и ныне там! :-(
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698967
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikа можно по-конкретнее, пожалуйста!

В этой доке 388 страниц. Хочешь чтобы их тебе кто-то пересказывал вслух и с выражением?
И, внезапно, это может оказаться бесполезным если ты используешь для доступа к БД какую-то
хрень, ходящую в обход OCI или другого официального клиента.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698971
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikJDBC-настройку Java-коннектора

тогда тебе надо конкретно начинать с "JDBC Programming with Unicode" вышеупомянутого гайда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39698978
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну спасибо хоть на этом! (правда уже сам дотумкал до этого раздела. Рою носом сейчас эту доку.... )
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699084
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПРОБЛЕМА РЕШЕНА! ВСЕМ СПАСИБО! :-)

оказалось, что единственный необходимый для этого параметр в JDBC-настройке Java-коннектора это:
oracle.jdbc.convertNcharLiterals=true

Пусть это тут ещё когда-нибудь кому-нибудь поможет! :-)
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699110
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikconvertNcharLiterals

Ты что, серьёзно данные через литералы передаёшь? Совсем пэхэпэшник что ли?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699122
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDBAshnikconvertNcharLiterals

Ты что, серьёзно данные через литералы передаёшь? Совсем пэхэпэшник что ли?..


не знаю. Проблема была с системой Talend (что есть не что иное как DI в форме java-фремворка, если не в курсе). Как там вунутрях устроено - х.з. Но нужно чтоб программа (talend-job) хавала файлы (в том числе с кириллическими имененами!) сдвигала их в некую archiv-папку и писала эти имена в оракл-базу. Вот последнее то и не шло у меня!
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699180
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. в Таленде этом, кстати, по разному реализовано, как я сейчас понял! Что-то идёт через литералы, что то через переменную!
Чтоб работало и то и другое, нужно _оба_ флага выставить! Итоговая строка настройки jdbc-connection поэтому:

oracle.jdbc.convertNcharLiterals=true&oracle.jdbc.defaultNChar=true
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699188
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikandrey_anonymousпропущено...
Проблема - в отсутствии базовых представлений о механизмах Globalization Support в оракеле.
обоснуй, пожалуйста? В чём конкретно это отсутствие? В том, что NLS_LANG не имеет отношения к nvarchar2, nclob и т.п.
Имеет-имеет. Для OCI-клиентов, что и было подремонстрировано
Главное для понимания работы NLS - осознать, что все эти переменные/пропертя и т.п. относятся к КЛИЕНТУ.
НЕ к серверу.
Клиент должен честно задекларировать - в какой кодировке он собирается работать.
И работать в задекларированной кодировке.
388 страниц GSG лучше, конечно, осилить - там много интересного и помимо кодировок, суперсетов и т.п..
Но НЕ ВРАТЬ и не выёживаться "от большого ума" - самый главный секрет :)
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699206
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousDBAshnikпропущено...

обоснуй, пожалуйста? В чём конкретно это отсутствие? В том, что NLS_LANG не имеет отношения к nvarchar2, nclob и т.п.
Имеет-имеет. Для OCI-клиентов, что и было подремонстрировано
Главное для понимания работы NLS - осознать, что все эти переменные/пропертя и т.п. относятся к КЛИЕНТУ.
НЕ к серверу.
Клиент должен честно задекларировать - в какой кодировке он собирается работать.
И работать в задекларированной кодировке.
388 страниц GSG лучше, конечно, осилить - там много интересного и помимо кодировок, суперсетов и т.п..
Но НЕ ВРАТЬ и не выёживаться "от большого ума" - самый главный секрет :)

кто чего конкретно врал????
кто в чём конкретно выёживался????
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699213
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikкто чего конкретно врал????
кто в чём конкретно выёживался????
Попытки установить NLS_LANG в AL16UTF16 - суть попытка солгать серверу про чарсет исходных данных.
Попытки выполнить convert в тот же AL16UTF16 в приложении - суть выёживание.
По факту в случае OCI следовало выставить в NLS_LANG кодировку данных в файлах, в случае же java/jdbc - указывать реальную кодировку данных в этих самых файлах ридеру, что привело бы к трансляции данных в уникодицу и далее - по отлаженной колее в оракель.
...кстати, о птичках.
Не знаю, умеет ли Talend загонять данные в оракеля лодырем (SAS, ODI и даже пентаха коммьюнити - умеют), но ежели умеет - следует, как минимум, рассмотреть этот подход.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699218
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПопытки установить NLS_LANG в AL16UTF16 - суть попытка солгать серверу про чарсет исходных
данных.

Сервер не купится. ЕМНИП, UTF16 не может быть использована в качестве кодировки для
NLS_LANG или инициализации Environment OCI.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699234
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕМНИП, UTF16 не может быть использована в качестве кодировки для
NLS_LANG или инициализации Environment OCI.

Откуда дровишки?
AFAIR, ограничение по UTF16 другое - его нельзя назначить database characterset-ом. Только National Characterset-ом.
Про ограничение на клиенте OCI что-то не припоминаю.
По джаве - до java5 внутренней кодировкой джавы был UCS2, после - UTF-16, который является strict superset-ом UCS2.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699250
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПро ограничение на клиенте OCI что-то не припоминаю.
Спасибо, Дмитрий - буду знать.
Как минимум, sqlplus под win cmd c al16utf16 не работает.
Код: plaintext
1.
Error 19 initializing SQL*Plus
Invalid NLS character set for this OS environment
Как и сама консоль:
Код: plaintext
1.
2.
C:\>chcp 1200
Указана недопустимая кодовая страница
кодовые страницы utf-16 (1200 и 1201 согласно https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers) доступны только для managed applications.
Вероятно, первое суть следствие второго.
Надо будет попробовать под другими платформами.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699254
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousКак минимум, sqlplus под win cmd c al16utf16 не работает.
В базе NLS клиента кодировке AL16UTF16 соответствует файл lx207d0.nlb, каковой имеется в наличии (locale builder не даст соврать).
По ходу дело все-таки не в самой кодировке, а в ее поддержке консолью.
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699258
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousОткуда дровишки?

OCI GuideWhen character set IDs are set through the function OCIEnvNlsCreate(),
they will replace the settings in NLS_LANG and NLS_NCHAR. In addition to all character
sets supported by NLSRTL, OCI_UTF16ID is also allowed as a character set ID in the
OCIEnvNlsCreate() function, although this ID is not valid in NLS_LANG or
NLS_NCHAR.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не могу инсертить юникод(кириллицу) из программы в базу
    #39699261
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovOCI GuideOCI_UTF16ID is also allowed as a character set ID in the
OCIEnvNlsCreate() function, although this ID is not valid in NLS_LANG or
NLS_NCHAR.

Ну да. Т.е. вообще в OCI можно, но вот конкретно в консоли - нельзя.
Почитал тут линуксоидов - объясняют возможностью наличия null-символа в utf-16 строке, что противно пионерскому духу классической C-строки. А потому нельзя сгенерировать локаль utf-16.
Раз нельзя локаль сгенерировать - то нельзя и консольные утилиты с такой некошерной кодировкой запускать.
Логично же, чо :)
Остались окошечные managed applications, ибо писанные на C юниксы по ходу отвалились как класс, а прочие VAX/VMS-ы и подавно.
Не знаю, насколько OCI вообще дружен с managed...
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не могу инсертить юникод(кириллицу) из программы в базу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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