powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ломается кодировка при чтении данных из таблиц
18 сообщений из 18, страница 1 из 1
Ломается кодировка при чтении данных из таблиц
    #39782632
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORA 12.2 x64

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

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

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

Oracle Globalization Support Guide.

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

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

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


возвращает
Typ=96 Len=3 CharacterSet=AL32UTF8: e2,82,ac
Как это понять?
...
Рейтинг: 0 / 0
Ломается кодировка при чтении данных из таблиц
    #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
Ломается кодировка при чтении данных из таблиц
    #39782670
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяКак это понять?

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

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

Скорее всего это не чтение кривое, это разные фонты
...
Рейтинг: 0 / 0
Ломается кодировка при чтении данных из таблиц
    #39782721
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninСкорее всего это не чтение кривое, это разные фонты
Одна и та же программа, одно и то же окошко в ней.
Какие разные фонты? С какого перепуга?
...
Рейтинг: 0 / 0
Ломается кодировка при чтении данных из таблиц
    #39782723
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяОдна и та же программа, одно и то же окошко в ней.И один и тот же символ. Может ты глазами поочередно мигаешь?
...
Рейтинг: 0 / 0
Ломается кодировка при чтении данных из таблиц
    #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
Ломается кодировка при чтении данных из таблиц
    #39783793
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousNLS_LANG на клиенте установлен в .al32utf8
Запрос
Код: plsql
1.
SELECT * FROM v$parameter WHERE NAME LIKE 'nls%'


дает RUSSIAN, причем одинаково и в SQL Developer, и в SQL Assistant
...
Рейтинг: 0 / 0
Ломается кодировка при чтении данных из таблиц
    #39783794
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в реестре стоит
NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251
для
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1
...
Рейтинг: 0 / 0
Ломается кодировка при чтении данных из таблиц
    #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
Ломается кодировка при чтении данных из таблиц
    #39784082
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous"Все врут" (с)
Удивительно, но запрос
Код: plsql
1.
SELECT Sys_Context( 'USERENV', 'language' ) FROM Dual


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

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

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

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

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

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


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