Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Кракозябры вместо кириллицы  [new]
Охрименко
Member

Откуда: Украина, Киев
Сообщений: 1440
d.nemolchev
PS. и уж тем более незачем пересоздавать БД...
Наговорите сейчас...


8-) Ваш вариант решения?
12 авг 10, 16:47    [9255388]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
Охрименко
8-) Ваш вариант решения?

пользовался вот этим
12 авг 10, 17:51    [9255826]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
PS. Только я делал не через update sys.prop$ (слишком грубо на мой взгляд), а с применением INTERNAL_USE (типа - свято чту уголовный кодекс )
12 авг 10, 17:59    [9255873]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
Охрименко
d.nemolchev
Охрименко

Если кракозябры, нужно менять кодировку базы, пересоздавать ее.


Если именно кракозябры - менять кодировку зачем? Оно неправильно, но конвертируется.
Вот если бы все русские буквы "вопросиками"...


Ну вобщем да. Если в параметрах базы кодировка WE8ISO8859P15 то конвертировать ее в Win1251 смысла нет. И так ясно нужно базу пересоздавать с нужной кодировкой.

Я, кстати, немного неправильно выразился:
надо не
d.nemolchev
Оно неправильно, но конвертируется.

а
d.nemolchev
Оно конвертируется, но неправильно отображается.
12 авг 10, 18:02    [9255895]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Охрименко
Member

Откуда: Украина, Киев
Сообщений: 1440
d.nemolchev
Охрименко
8-) Ваш вариант решения?

пользовался вот этим


Так, а в какой кодировке будет в базе та информация которая туда уже записана в этой кодировке, в неправильной?
12 авг 10, 18:15    [9255985]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
Охрименко
Так, а в какой кодировке будет в базе та информация которая туда уже записана в этой кодировке, в неправильной?

В той же самой, в которой была записана туда изначально.
Содержимое данных от от этой операции не меняется, меняется ее восприятие, т.е. СУБД считает эти же данные закодированными в новой установленной кодировке.

Но это все фигня, не туда копаем скорее всего...
ТС нам говорит, что
Andrey Sk
на сервере БД запускаю sqlplus, вижу те же кракозябры, меняю кодировку окна cmd на win1251? устанавливаю консольный шрифт и вижу кириллицу

Если кракозябры именнго те же, то м.б. проблема не в кодировках, а в шрифтах?
Только не совсем я понял про "меняю кодировку окна cmd на win1251"...
13 авг 10, 08:29    [9257440]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Andrey Sk
Member

Откуда: Столица СССР
Сообщений: 106
d.nemolchev

Только не совсем я понял про "меняю кодировку окна cmd на win1251"...

Это значит, что на сервере БД я могу правильно читать кириллицу через sqlplus после изменения кодировки досовского окна на win1251
13 авг 10, 10:15    [9258065]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
Andrey Sk,

Просто я не в курсе каким образом меняется у окна cmd.exe меняется кодировка (не шрифт, а именно - кодировка).
В WinXP я обычно запускаю cmd.exe, потом set nls_lang=russian_russia.ru8pc866 (досовская кодировка) и только после этого sqlplus.exe.
После этих шаманств русский язык в cmd-окне отображается нормально, а без них Oracle считает в соответствии с моими настройками рееста NLS_LANG равным RUSSIAN_RUSSIA.CL8MSWIN1251 и я получаю кракозябры :-)
13 авг 10, 10:55    [9258477]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18487
chcp ?
13 авг 10, 10:59    [9258506]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Andrey Sk
Member

Откуда: Столица СССР
Сообщений: 106
d.nemolchev,

chcp 1251
13 авг 10, 11:34    [9258815]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
Вячеслав Любомудров, Andrey Sk

Обалдеть... "Век живи - век учись!" (с) Поручик

Спасибо, буду знать.
13 авг 10, 11:41    [9258888]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Andrey Sk
Member

Откуда: Столица СССР
Сообщений: 106
d.nemolchev,

а мне-то что с этим Auaca ia o?ainii?oiue делать?
13 авг 10, 12:04    [9259117]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
1. из каких соображений выбрано NLS_CHARACTERSET=WE8ISO8859P15 при условии хранения в БД русских символов?
2. Что мешает Вам изменить NLS_CHARACTERSET?
3. БД разрабатывается или уже эксплуатируется?

Это не я ее так храню, а владельцы БД.

на сервере БД запускаю sqlplus,

т.е. БД полностью в Ваших руках...

на сервере БД запускаю sqlplus, вижу те же кракозябры, меняю кодировку окна cmd на win1251? устанавливаю консольный шрифт и вижу кириллицу

по другому быть и не должно: Вы запускаете клиента на той же машине и с теми же NLS-параметрами, что и запущен сервер, поэтому никакой конвертации символьных данных на уровне Oracle*Net по сути не происходит - сервак выдает на клиента данные байт-в-байт как они и хранятся в БД.
Вообще вопрос - каким образом туда записывались русские символы? Из-под каких NLS-настроек окружения?

на сервере IIS sqlplus нет

Driver={Microsoft ODBC for Oracle};

Т.е. клиент Оракла на машине с IIS не установлен.
Какие настройки использует данный драйвер ODBC - не могу сказать, в ОДБЦ не силен.
Как вариант можно установить на машину с IIS клиента Oracle, настроить NLS_LANG в реестре и использовать другой драйвер ODBC.
13 авг 10, 14:27    [9260489]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Andrey Sk
Member

Откуда: Столица СССР
Сообщений: 106
d.nemolchev

т.е. БД полностью в Ваших руках...

то, что я имею к ней полный доступ не дает мне права менять ее кодировку - база рабочая, в realtime в нее пишутся данные и экспериментировать низзя - голова слетит. А вытащить данные надо...
d.nemolchev

Вообще вопрос - каким образом туда записывались русские символы? Из-под каких NLS-настроек окружения?

данные с русскими буквами туда попадают из под другого (не web) приложения, написанного авторами БД, контактов с авторами нет. На клиентской машине с их приложением локаль русская, а в реестре NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15. БД изначально не была расчитана на работу с русскими данными, так бывает...Может они пишут туда данные из своего приложения используя другую кодовую страницу - не ISO-8859-15.
Пробовал читать данные так - Select convert(my_field,'CL8MSWIN1251','WE8ISO8859P15') FROM my_table - не помогает.
d.nemolchev

Т.е. клиент Оракла на машине с IIS не установлен.
Какие настройки использует данный драйвер ODBC - не могу сказать, в ОДБЦ не силен.
Как вариант можно установить на машину с IIS клиента Oracle, настроить NLS_LANG в реестре и использовать другой драйвер ODBC.

Спасибо, что не бросаете в беде, борюсь с проблемой дальше...
13 авг 10, 16:01    [9261309]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Andrey Sk,

Nvarchar2.
13 авг 10, 16:07    [9261357]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
Andrey Sk
Member

Откуда: Столица СССР
Сообщений: 106
-2-
Andrey Sk,

Nvarchar2.

Талант - брат краткости! Но не у меня...
Изложите подробнее, плиииииз
13 авг 10, 16:26    [9261538]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Andrey Sk,

Поменяй тип полей, если они в национальном чаре в юникодный. Можно на уровне вьюх.
13 авг 10, 16:40    [9261644]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
Andrey Sk

d.nemolchev

Вообще вопрос - каким образом туда записывались русские символы? Из-под каких NLS-настроек окружения?

данные с русскими буквами туда попадают из под другого (не web) приложения, написанного авторами БД, контактов с авторами нет. На клиентской машине с их приложением локаль русская, а в реестре NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15. БД изначально не была расчитана на работу с русскими данными, так бывает...Может они пишут туда данные из своего приложения используя другую кодовую страницу - не ISO-8859-15.

Так-с-с...
Вот это я и подозревал.
Если IRL встретите авторов - оторвите им яйца за такую конфигурацию (да простят меня модераторы).

Следующий вопрос: только ли русские символы вставляются в БД? Или еще какие-то языки используются?

Если только русские, то можно будет сменить NLS_CHARACTERSET БД на CL8MSWIN1251 указанным ранее способом (INTERNAL_USE), но придется на всех клиентских машинах соответственно в реестре NLS_LANG. Результат отображения должен быть эквивалентен текущей ситуации.

Поясню: в клиенте в полях ввода вводятся данные в 1251, сервер, принимая данные от oci.dll считает что все поданное ею для передачи на сервер закодировано в кодировке клиента (NLS_LANG=.WE8ISO8859P15), смотрит кодировку БД - там тоже WE8ISO8859P15, значит перекодировать ничего не надо, и приспокойно ложит в поля данные "as is".
Когда подключается IIS через ODBC, то сам ODBC наверняка устанавливает сеанс с кодировкой CL8MSWIN1251 и при передачи от сервера на клиент в сеансе уже происходит перекодирование байтиков WE8ISO8859P15->CL8MSWIN1251. Получаются кракозябры.
13 авг 10, 16:43    [9261672]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
-2-
Member

Откуда:
Сообщений: 15330
d.nemolchev
и приспокойно ложит в поля данные "as is"
Вот за такую "оптимизацию" надо яйца отрывать ораклу, а не полагаться на то, что разработчик прочитает документацию.
13 авг 10, 16:49    [9261737]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
-2-
Вот за такую "оптимизацию" надо яйца отрывать ораклу, а не полагаться на то, что разработчик прочитает документацию.

М.б... Но представляете сколько CPU-тактов будет стоить валидация каждого символа строки на вхождение в набор символов чарсета? Простой convert из одного чарсета в него же смысла не имеет и ничего все равно не даст...
13 авг 10, 18:18    [9262453]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
-2-
Member

Откуда:
Сообщений: 15330
d.nemolchev
Но представляете сколько CPU-тактов будет стоить валидация каждого символа строки на вхождение в набор символов чарсета?
Приблизительно 1. По сравнению с задержками по сети не критично.
13 авг 10, 19:06    [9262788]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
чуваг, поставь на клиенте (там где ASP крутицо) переменную NLS_LANG=american_america.WE8ISO8859P15

все должно работать
13 авг 10, 19:18    [9262832]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
это, естественно, неправильно и костыль, но должно работать.
Дальше будешь думать как хранить правильно в базе, сначала пусть заработает.

Работать должно вот что: вносишь кирилицу - получаешь кирилицу.
13 авг 10, 19:19    [9262842]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
-2-
Приблизительно 1. По сравнению с задержками по сети не критично.

Неправда Ваша...
1. загрузить адрес начала строки (1 такт)
2. загрузить длину строки (1 такт)
3. загрузить адрес начала таблицы символов (1 такт)
4. загрузить длину таблицы символов (1 такт)
5. цикл для перебора каждого символа строки:
6. искать в таблице символов (1 такт на элемент таблицы, при 150 символах - среднее кол-во = 75 тактов)
7. переход к следующему символу (1 такт)

т.е. как минимум 76 тактов без накладных расходов и учета того, что ОЗУ работает на частоте ниже процессорной (холостые такты ожидания готовности шины).
ИМХО - мало не покажется, особенно для многобайтных кодировок с переменной длиной (1-4 байта на символ)...
14 авг 10, 10:53    [9264180]     Ответить | Цитировать Сообщить модератору
 Re: Кракозябры вместо кириллицы  [new]
d.nemolchev
Member

Откуда: Кустанай
Сообщений: 310
брадобрей
это, естественно, неправильно и костыль, но должно работать.
Дальше будешь думать как хранить правильно в базе, сначала пусть заработает.


:-) Авторы сего творения именно так и поступили в свое время.
Закон четности ошибок в действии...
14 авг 10, 10:54    [9264181]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Oracle Ответить