powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / При вставке половина символов русской строки �
25 сообщений из 57, страница 1 из 3
При вставке половина символов русской строки �
    #39977856
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

При попытке вставить в поле CLOB строку русского текста, половина этой строки заменяется знаком вопроса �. Если же вставляем исходный json, то небольшая часть конца json дублируется, при этом все русские символы заменяются на этот знак �, а в дублированной части русские буквы отображаются нормально.

Пробовал использовать функцию convert при вставке. Если приводить к кодировке CL8ISO8859P5, то результат не меняется, если приводить к кодировке UTF8, то строка выводится нормально, но добавляется в конец строки некоторые символы. Например при вставке convert('привет', 'utf8') результат выглядит так: "приветаВаЕб☐"

NLS_CHARACTERSET = CL8ISO8859P5

С чем это может быть связано?
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977862
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более непонятный текст придумать сложно

Можно для тупых объяснить, кто и что вставлял, куда и откуда, что нажимали для вставки Ctrl-C, Ctrl-V или Ctrl-Insert, Shift-Insert и так далее.
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977866
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev, В таблице есть поле типа CLOB. Вставляем текст запросом INSERT INTO. Для примера:

Код: plaintext
1.
2.
3.
INSERT INTO table 
(app) 
VALUES
('привет')

Результат: ���вет
Код: plaintext
1.
2.
3.
INSERT INTO table 
(app) 
VALUES
(convert('привет','utf8'))

Результат: приветаВаЕб☐
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977872
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pwflamyВставляем текст запросом INSERT INTO.

Ошибка в приложении. Жалуйтесь его автору.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977891
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
pwflamy


NLS_CHARACTERSET = CL8ISO8859P5

?
мигрировать на уникод
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977892
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pwflamy

NLS_CHARACTERSET = CL8ISO8859P5

С чем это может быть связано?

- С некорректной настройкой клиента (NLS_LANG указывает кодировку, отличную от кодировки вставляемого текста)
- С неверно выбранной кодировкой БД (в выбранной кодировке БД невозможно представить символы кириллицы)
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977914
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousв выбранной кодировке БД невозможно представить символы кириллицы

С чего бы? ISO 8859-5 не слишком распространённая, но всё же вполне кириллическая кодировка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39977919
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Там дохренища тонкостей, в общем и целом проще мигрировать на уникод и не мучаться..

tl;drCLOBs when using fixed width character set NLS_CHARACTERSET are stored in the NLS_CHARACTERSET character set on disk. Examples are WE8MSWIN1252 , AR8ISO8859P6 etc.

However , CLOB's (and NCLOB's) of varying-width character sets (ex: UTF8, AL32UTF8) are stored in an internal fixed-width Unicode character set on disk. When data is fetched from, or written to, disk storage, Oracle converts between the internal format and the database (CLOB) or the national character (NCLOB) set Oracle uses for the "external" (N)CLOB datatypes.

Note on loading CLOBs from files in varying-width character sets
In Oracle9.2 and later the programmatic interface DBMS_LOB.LOADFROMFILE() should not be used for loading files to CLOBs for varying-width character sets. Instead use the new programmatic interface DBMS_LOB.LOADCLOBFROMFILE().
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978006
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
pwflamy

NLS_CHARACTERSET = CL8ISO8859P5

С чем это может быть связано?

- С некорректной настройкой клиента (NLS_LANG указывает кодировку, отличную от кодировки вставляемого текста)
- С неверно выбранной кодировкой БД (в выбранной кодировке БД невозможно представить символы кириллицы)

Вывод nls_database_parameters такой:
NLS_ISO_CURRENCY=AMERICA
NLS_LANGUAGE=AMERICAN

По поводу смены кодировки, наши базисты не хотят, так как по их словам придется пересоздавать базу
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978012
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно не хотят
Если не работать со множеством языков одновременно, то юникод зло -- данные занимают больше места, обработка тормозней
А если нужны данные многих языков одновременно, но в небольшом количестве табличек -- можно воспользоваться N-типами

2ТС. На чем написан клиент? И какое значение переменной NLS_LANG на клиенте?
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978027
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров, приложение, что общается с бд, написано на java. Используется thin oracle jdbc driver.
Кроме этого, для теста подключаюсь к бд через idea OracleDriver
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978072
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С большой долей вероятности (>90%) строки уже испорчены на стороне Java (в неправильной/не Java/ кодировке)
Разбирайтесь, где у Вас кривые строки и из-за чего они возникают
Учитесь пользоваться отладчиком или, как минимум, логированием/троссировкой в своем коде. Начиная от банального System.out.println до Log4j и до 100500 других способов поиска ошибки.

IMHO
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978080
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Строка передается в формате UTF-8 и по логам передается валидной вплоть до передачи ее как аргумента в процедуру sql. Отладчик показывает такой же результат - строка нормально читается.
А вот если эту же строку попытаться считать сразу же после вставки в таблицу, то обратно она уже возвращается с символами �

Приложение работало нормально и передавало строки в UTF-8, однако после того как были изменены какие-то параметры со стороны базистов (а они очень занятые люди), начались эти проблемы. NLS_CHARACTERSET они как я понимаю не могли поменять, значит какие-то другие параметры изменились и повлияли на это.

Опять таки, выполняя просто запрос insert into через консоль idea, результат выходит таким же
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978087
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jdbc всегда работает в юникоде, насколько я знаю, поэтому никаких конвертаций там делать не нужно если данные не берутся из внешних источников, файлов, например

Не надо юзать какие-то левые тулзы, лучший и самый надежный клиент -- это родной sqlplus
Вот через него и проверяй вставку и чтение (установив NLS_LANG в соответсвии с кодовой страницей терминала)
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978095
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pwflamyОпять таки, выполняя просто запрос insert into через консоль idea, результат выходит таким же

А через SQL*Plus?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978109
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делайте нормальный тест-кейс + тест на создание тест-таблицы + настройки с сервера
Выкладывайте в форум код и результат выполнения

Или "лукавит" Oracle или Вы )))

IMHO
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978139
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Попробовал сейчас через Oracle SQL Developer (так как установить Sql *Plus не могу)
Выполнил запрос:
INSERT INTO table
(id, app)
VALUES
(200, 'привет')

Далее выполняю select через Oracle SQL Developer - результат в поле app: ☐☐☐☐☐☐
Select через IDEA выводит - ���вет


Таблица создавалась след образом:
create table table
(
id NUMBER NOT NULL,
app CLOB
)

Результат запроса select * from nls_database_parameters:
NLS_DATE_LANGUAGE = AMERICAN
NLS_NUMERIC_CHARACTERS = .,
NLS_NCHAR_CHARACTERSET = AL16UTF16
NLS_CHARACTERSET = CL8ISO8859P5
NLS_ISO_CURRENCY = AMERICA
NLS_CURRENCY = $
NLS_TERRITORY = AMERICA
NLS_LANGUAGE = AMERICAN

Результат запроса select * from nls_session_parameters:
NLS_LANGUAGE = AMERICAN
NLS_TERRITORY = CIS
NLS_CURRENCY = p.
NLS_ISO_CURRENCY = CIS
NLS_NUMERIC_CHARACTERS = ,

Если еще какие-то параметры нужны, которые можно вытащить запросом, то напишите
NLS_DATE_LANGUAGE = AMERICAN
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978143
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pwflamyустановить Sql *Plus не могу

Что мешает?

Обычно он уже установлен как часть Oracle Client.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978179
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Политика безопасности, есть определенный список ПО, который можно устанавливать
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978189
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оракул должен входить в этот список, ибо как вы с ним можете работать не устанавливая?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При вставке половина символов русской строки �
    #39978191
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pwflamy
Строка передается в формате UTF-8 и по логам передается валидной вплоть до передачи ее как аргумента в процедуру sql.

1. Джава унутре без специальных ухищрений работает в unicode, а не в UTF8. (да-да, utf-8 - это НЕ unicode, как и utf-16, utf-32 - это лишь представление родных юникодных codepoints)
2. Попробуйте локализовать
Для контроля сделайте таблицу с двума атрибутами: varchar2 и clob, вставьте туда свой "привет".
2а. Попробуйте Nvarchar2, NClob.
2б. Enable/disable storage in row
3. select dump(<field>,1016) прояснит ситуацию с хранимыми байтами.
...
Рейтинг: 0 / 0
При вставке половина символов русской строки &#65533;
    #39978198
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Попробуйте локализовать

IMHO сначала локализовать нужно в java
1) или распечатать коды символов которые лежат в String, что бы убедиться, что кодировка правильная
2) задать строку не в виде платформеннозависимого 'Привет', а в виде кодов \u
...
Рейтинг: 0 / 0
При вставке половина символов русской строки &#65533;
    #39978206
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Leonid Kudryavtsev,

ТС же сказал, что в sql developer проблема повторяется
...
Рейтинг: 0 / 0
При вставке половина символов русской строки &#65533;
    #39978211
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с одним Ява-клиентом повторяется в другом Ява-клиенте. Кто-то будет сомневаться в
её локализации?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При вставке половина символов русской строки &#65533;
    #39978217
pwflamy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

1) json, который передается в бд, создается с помощью Jackson ObjectMapper, который возвращает строку в UFT-8
2) попробую
3) select dump(app, 1016) from table - ошибка expected - got CLOB
select dump(to_char(app), 1016) - результат: Typ=1, Len=6, CharacterSet=CL8ISO8859P5: df, e0, d8, d2, d5, e2

Попробовал строку "привет" передать в формате "привет" - ���вет
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / При вставке половина символов русской строки &#65533;
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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