powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не могу инсертить юникод(кириллицу) из программы в базу
25 сообщений из 48, страница 1 из 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
25 сообщений из 48, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не могу инсертить юникод(кириллицу) из программы в базу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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