|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Добрый день! При попытке вставить в поле CLOB строку русского текста, половина этой строки заменяется знаком вопроса �. Если же вставляем исходный json, то небольшая часть конца json дублируется, при этом все русские символы заменяются на этот знак �, а в дублированной части русские буквы отображаются нормально. Пробовал использовать функцию convert при вставке. Если приводить к кодировке CL8ISO8859P5, то результат не меняется, если приводить к кодировке UTF8, то строка выводится нормально, но добавляется в конец строки некоторые символы. Например при вставке convert('привет', 'utf8') результат выглядит так: "приветаВаЕб☐" NLS_CHARACTERSET = CL8ISO8859P5 С чем это может быть связано? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 18:25 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Более непонятный текст придумать сложно Можно для тупых объяснить, кто и что вставлял, куда и откуда, что нажимали для вставки Ctrl-C, Ctrl-V или Ctrl-Insert, Shift-Insert и так далее. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 18:42 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, В таблице есть поле типа CLOB. Вставляем текст запросом INSERT INTO. Для примера: Код: plaintext 1. 2. 3.
Результат: ���вет Код: plaintext 1. 2. 3.
Результат: приветаВаЕб☐ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 18:53 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
pwflamyВставляем текст запросом INSERT INTO. Ошибка в приложении. Жалуйтесь его автору. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 19:20 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
pwflamy NLS_CHARACTERSET = CL8ISO8859P5 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 20:39 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
pwflamy NLS_CHARACTERSET = CL8ISO8859P5 С чем это может быть связано? - С некорректной настройкой клиента (NLS_LANG указывает кодировку, отличную от кодировки вставляемого текста) - С неверно выбранной кодировкой БД (в выбранной кодировке БД невозможно представить символы кириллицы) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 20:44 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
andrey_anonymousв выбранной кодировке БД невозможно представить символы кириллицы С чего бы? ISO 8859-5 не слишком распространённая, но всё же вполне кириллическая кодировка. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 22:08 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Там дохренища тонкостей, в общем и целом проще мигрировать на уникод и не мучаться.. 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(). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2020, 22:20 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
andrey_anonymous pwflamy NLS_CHARACTERSET = CL8ISO8859P5 С чем это может быть связано? - С некорректной настройкой клиента (NLS_LANG указывает кодировку, отличную от кодировки вставляемого текста) - С неверно выбранной кодировкой БД (в выбранной кодировке БД невозможно представить символы кириллицы) Вывод nls_database_parameters такой: NLS_ISO_CURRENCY=AMERICA NLS_LANGUAGE=AMERICAN По поводу смены кодировки, наши базисты не хотят, так как по их словам придется пересоздавать базу ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 09:48 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Правильно не хотят Если не работать со множеством языков одновременно, то юникод зло -- данные занимают больше места, обработка тормозней А если нужны данные многих языков одновременно, но в небольшом количестве табличек -- можно воспользоваться N-типами 2ТС. На чем написан клиент? И какое значение переменной NLS_LANG на клиенте? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 10:15 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, приложение, что общается с бд, написано на java. Используется thin oracle jdbc driver. Кроме этого, для теста подключаюсь к бд через idea OracleDriver ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 11:08 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
С большой долей вероятности (>90%) строки уже испорчены на стороне Java (в неправильной/не Java/ кодировке) Разбирайтесь, где у Вас кривые строки и из-за чего они возникают Учитесь пользоваться отладчиком или, как минимум, логированием/троссировкой в своем коде. Начиная от банального System.out.println до Log4j и до 100500 других способов поиска ошибки. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 12:17 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Строка передается в формате UTF-8 и по логам передается валидной вплоть до передачи ее как аргумента в процедуру sql. Отладчик показывает такой же результат - строка нормально читается. А вот если эту же строку попытаться считать сразу же после вставки в таблицу, то обратно она уже возвращается с символами � Приложение работало нормально и передавало строки в UTF-8, однако после того как были изменены какие-то параметры со стороны базистов (а они очень занятые люди), начались эти проблемы. NLS_CHARACTERSET они как я понимаю не могли поменять, значит какие-то другие параметры изменились и повлияли на это. Опять таки, выполняя просто запрос insert into через консоль idea, результат выходит таким же ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 12:32 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
jdbc всегда работает в юникоде, насколько я знаю, поэтому никаких конвертаций там делать не нужно если данные не берутся из внешних источников, файлов, например Не надо юзать какие-то левые тулзы, лучший и самый надежный клиент -- это родной sqlplus Вот через него и проверяй вставку и чтение (установив NLS_LANG в соответсвии с кодовой страницей терминала) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 12:51 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
pwflamyОпять таки, выполняя просто запрос insert into через консоль idea, результат выходит таким же А через SQL*Plus?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 13:01 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Делайте нормальный тест-кейс + тест на создание тест-таблицы + настройки с сервера Выкладывайте в форум код и результат выполнения Или "лукавит" Oracle или Вы ))) IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 13:27 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 14:13 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
pwflamyустановить Sql *Plus не могу Что мешает? Обычно он уже установлен как часть Oracle Client. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 14:17 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Политика безопасности, есть определенный список ПО, который можно устанавливать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 15:13 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Оракул должен входить в этот список, ибо как вы с ним можете работать не устанавливая?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 15:25 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
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) прояснит ситуацию с хранимыми байтами. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 15:28 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
andrey_anonymous Попробуйте локализовать IMHO сначала локализовать нужно в java 1) или распечатать коды символов которые лежат в String, что бы убедиться, что кодировка правильная 2) задать строку не в виде платформеннозависимого 'Привет', а в виде кодов \u ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 15:36 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, ТС же сказал, что в sql developer проблема повторяется ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 15:49 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
Проблема с одним Ява-клиентом повторяется в другом Ява-клиенте. Кто-то будет сомневаться в её локализации?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 15:56 |
|
При вставке половина символов русской строки �
|
|||
---|---|---|---|
#18+
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 Попробовал строку "привет" передать в формате "привет" - ���вет ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2020, 16:09 |
|
|
start [/forum/topic.php?fid=52&startmsg=39977856&tid=1881052]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 163ms |
0 / 0 |