Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ломается кодировка при чтении данных из таблиц / 18 сообщений из 18, страница 1 из 1
05.03.2019, 17:30
    #39782632
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
ORA 12.2 x64

В SQL Developer никаких проблем, корректно пишет и читает.
А вот SQL Assistant пишет в БД всё правильно (Developer'ом видно), а при чтении показывает всякую гадость, если символы юникодные. Например, символ цента (буква "c" с вертикальной чертой, на форуме неправильно показывается как "¢") Assistant читает как "Вў".

Пробовал клиентов x64 и x32 (соответственно и версии Assistant), результат одинаковый.

Куда копать? Это какие-то настройки Оракла или проблемы Assistant?
...
Рейтинг: 0 / 0
05.03.2019, 17:36
    #39782636
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяКуда копать? Это какие-то настройки Оракла или проблемы Assistant?

Oracle Globalization Support Guide.

Не всё, что "видно правильно" на самом деле правильно. Надо аккуратно проверять байты на
соответствие кодировкам на всех этапах, включая хранение. Функция dump() тебе поможет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.03.2019, 17:42
    #39782642
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный Вася,

Возможно проблемы с фонтом, системными таблицами перекодировки

Начни с SQL.ru FAQ: CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке
...
Рейтинг: 0 / 0
05.03.2019, 18:13
    #39782665
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Смотрю по таблице символов для знака евро код 20AC.
А в developer запрос
Код: plsql
1.
SELECT dump('€',1016) from dual


возвращает
Typ=96 Len=3 CharacterSet=AL32UTF8: e2,82,ac
Как это понять?
...
Рейтинг: 0 / 0
05.03.2019, 18:30
    #39782669
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяСмотрю по таблице символов для знака евро код 20AC.
А в developer запрос
Код: plsql
1.
SELECT dump('€',1016) from dual


возвращает
Typ=96 Len=3 CharacterSet=AL32UTF8: e2,82,ac
Как это понять?
Вроде правильно, три байта:
Unicode Character 'EURO SIGN' (U+20AC)
...
Рейтинг: 0 / 0
05.03.2019, 18:31
    #39782670
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяКак это понять?

Это значит, что тебе надо открывать для себя удивительный мир кодировок, включая UTF-8.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.03.2019, 19:15
    #39782688
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Значит, в БД записывается правильно (из таблиц dump для евро те же коды показывает).

Тогда возвращаемся к первому посту: сохранение происходит верно, а вот чтение кривое.
Как такое может быть? Настройки ведь не меняю между ними.
...
Рейтинг: 0 / 0
05.03.2019, 21:14
    #39782718
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный Вася,

Скорее всего это не чтение кривое, это разные фонты
...
Рейтинг: 0 / 0
05.03.2019, 22:00
    #39782721
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Vadim LejninСкорее всего это не чтение кривое, это разные фонты
Одна и та же программа, одно и то же окошко в ней.
Какие разные фонты? С какого перепуга?
...
Рейтинг: 0 / 0
05.03.2019, 22:11
    #39782723
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяОдна и та же программа, одно и то же окошко в ней.И один и тот же символ. Может ты глазами поочередно мигаешь?
...
Рейтинг: 0 / 0
06.03.2019, 00:22
    #39782747
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяORA 12.2 x64

В SQL Developer никаких проблем, корректно пишет и читает.
А вот SQL Assistant пишет в БД всё правильно (Developer'ом видно), а при чтении показывает всякую гадость, если символы юникодные. Например, символ цента (буква "c" с вертикальной чертой, на форуме неправильно показывается как "¢") Assistant читает как "Вў".
Ошибка конфигурации клиента: NLS_LANG на клиенте установлен в .al32utf8, сам клиент (окошко) работает в локали (шрифтом) win1251.

Корректные варианты:
- объявить NLS_LANG .cl8mswin1251 - получите знак вопроса, поскольку 1251 не содержит "¢"
- объявить NLS_LANG .cl8mswin1252 - отработает "¢", но русские буквы (if any) станут вопросами
- переключить SQL Assistant на работу в UTF8.
...
Рейтинг: 0 / 0
07.03.2019, 23:05
    #39783793
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
andrey_anonymousNLS_LANG на клиенте установлен в .al32utf8
Запрос
Код: plsql
1.
SELECT * FROM v$parameter WHERE NAME LIKE 'nls%'


дает RUSSIAN, причем одинаково и в SQL Developer, и в SQL Assistant
...
Рейтинг: 0 / 0
07.03.2019, 23:19
    #39783794
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
И в реестре стоит
NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251
для
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1
...
Рейтинг: 0 / 0
08.03.2019, 00:22
    #39783801
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяЗапрос
не имеет отношения к проблеме.

Правильный ВасяИ в реестре стоит
NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251
для
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1
"Все врут" (с)

Судя по
Правильный Васязапрос
Код: plsql
1.
SELECT dump('€',1016) from dual


возвращает
Typ=96 Len=3 CharacterSet=AL32UTF8: e2,82,ac

серверный characterset суть al32utf8.
Если бы для SQL Assistant действовала CL8MSWIN1251, то Вы получили бы "?", а не "Вў", которая свидетельствует о попытке отобразить кодовую последовательность e2,82,ac в кодировке 1251.

...конкретно SQL Developer:
- джавный, oracle client не использует и потому на на NLS_LANG не реагирует
- внутренне-юникодный, ему такие проблемы не свойственны.
...
Рейтинг: 0 / 0
09.03.2019, 16:26
    #39784082
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
andrey_anonymous"Все врут" (с)
Удивительно, но запрос
Код: plsql
1.
SELECT Sys_Context( 'USERENV', 'language' ) FROM Dual


возвращает RUSSIAN_RUSSIA.AL32UTF8

Тогда не понимаю, почему значение из реестра не берётся?
...
Рейтинг: 0 / 0
09.03.2019, 17:12
    #39784089
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Правильный ВасяУдивительно, но запрос

Попытка узнать кодировку клиента запросом к серверу - идея не очень удачная, сервер о ней просто не знает, за ненадобностью.
Взялось-не взялось...
Под Win есть много мест, откуда oracle клиент выдернет кодировку.
Первый приоритет - переменная окружения NLS_LANG, которая может быть задана:
- локально в процессе (обычно при запуске приложения пакетным файлом).
- унаследована из пользовательских переменных
- унаследована из общесистемных переменных
Далее - штук пять ключей в реестре в приоритете "от частного к общему", я их давно и прочно забыл за ненадобностью.
Вроде как в platform guide было описание реестра, попробуйте там посмотреть... только переменные окружения в любом случае приоритетнее.
...
Рейтинг: 0 / 0
09.03.2019, 17:24
    #39784090
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.
C:\>set NLS_LANG=.RU8PC866

C:\>sqlplus user/pass@db

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

SQL> SELECT Sys_Context( 'USERENV', 'language' ) FROM Dual;

SYS_CONTEXT('USERENV','LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICA.CL8MSWIN1251


-- "Взялось" ли cp866? Cохраним строчку в кодировке консоли:

SQL> create table dropme_t(x) as select 'Правильный Вася' from dual;

Table created.

SQL> quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

-- Переключим консоль в 1251
C:\>chcp 1251
Текущая кодовая страница: 1251

C:\>set NLS_LANG=.CL8MSWIN1251

C:\>sqlplus user/pass@db

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

SQL> select * from dropme_t;

X
---------------
Правильный Вася

-- Как видим, получили обратно ту же строчку, но уже в кодировке 1251.
-- Сталбыть, окружение настроено правильно.

SQL> quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

C:\>
...
Рейтинг: 0 / 0
09.03.2019, 20:52
    #39784151
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ломается кодировка при чтении данных из таблиц
Спасибо.

andrey_anonymousПервый приоритет - переменная окружения NLS_LANG
Почему-то для SQL Assistant не помогает, ничего не поменялось.
Устанавливал поочередно и в батнике, и в общесистемных.

andrey_anonymous- локально в процессе (обычно при запуске приложения пакетным файлом).
Такой метод пытался использовать и для еще одной программы, но тоже не помогало. А вот через общесистемные для нее помогло.

Теперь я еще больше в непонятках. В какой бубен еще стучать, вокруг какой пальмы прыгать...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ломается кодировка при чтении данных из таблиц / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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