Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не могу инсертить юникод(кириллицу) из программы в базу / 25 сообщений из 48, страница 1 из 2
04.09.2018, 20:13
    #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
04.09.2018, 21:40
    #39698096
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
DBAshnik
Код: java
1.
convert



инсертить кириллицу не получается! :-(
Где грабли?
Здесь
...
Рейтинг: 0 / 0
05.09.2018, 11:53
    #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
05.09.2018, 15:56
    #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
05.09.2018, 16:09
    #39698614
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
DBAshnikбукву "Й"Да не парься. Если после латиницей икс X и игрек Y вместо Й напишешь знак типа решетки #, то все и так поймут.
...
Рейтинг: 0 / 0
05.09.2018, 16:12
    #39698615
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
-2-DBAshnikбукву "Й"Да не парься. Если после латиницей икс X и игрек Y вместо Й напишешь знак типа решетки #, то все и так поймут.

не смешно! Я реально тут засоитовался уже с этой проблемой. :-( Можешь помочь?
...
Рейтинг: 0 / 0
05.09.2018, 16:16
    #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
05.09.2018, 16:22
    #39698622
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
а у меня вот такая байда:

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

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



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

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

в ... 191 короче
...
Рейтинг: 0 / 0
05.09.2018, 16:45
    #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
05.09.2018, 16:50
    #39698642
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
В "Oracle SQL Developer"-е всё нормально, кстати! (возвращает сразу 1049)
Мерзкий TOAD! :-(
...
Рейтинг: 0 / 0
05.09.2018, 16:50
    #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
05.09.2018, 17:06
    #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
05.09.2018, 17:10
    #39698650
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
на сервере:

Код: plsql
1.
2.
SQL> host echo $NLS_LANG
american_america.we8iso8859p15
...
Рейтинг: 0 / 0
05.09.2018, 17:21
    #39698653
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
А на клиенте (т.е. на моём Window-PC) NLS_LANG не проставлена, кстати!!! Может в этом проблема!?!?
...
Рейтинг: 0 / 0
05.09.2018, 17:50
    #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
05.09.2018, 17:50
    #39698667
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу инсертить юникод(кириллицу) из программы в базу
DBAshnikА на клиенте (т.е. на моём Window-PC) NLS_LANG не проставлена, кстати!!! Может в этом проблема!?!?

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

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



V$NLS_VALID_VALUES

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

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

P.S. и, кстати, что меня Вадим про "NLS_LANG какой" зря спросил, получается? ;-)
...
Рейтинг: 0 / 0
06.09.2018, 10:57
    #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
06.09.2018, 10:57
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не могу инсертить юникод(кириллицу) из программы в базу / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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