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


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