The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Вставка в Oracle через DBI "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Вставка в Oracle через DBI "  
Сообщение от afreet email on 26-Июн-06, 09:58 
Привет всем.
Столкнулся с такой проблемой, требуется перегнать большой объем данных из mysql в оракл. Был написан скрипт на перле, который очень неплохо работает, пока дело не доходит до русских строк.

Из мускула все данные получаем в нормальной форме, но при попытке вставить их в Оракл, он их зачем-то переводит в UTF-8 и в таком виде уже пытается вставить.

Пробовал менять NLS_LANG, локаль и даже iconv-ом конвертить, но ничего дельного не вышло. Может кто сталкивался с такой проблемой?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Вставка в Oracle через DBI "  
Сообщение от vic (??) on 26-Июн-06, 19:09 
>Привет всем.
>Столкнулся с такой проблемой, требуется перегнать большой объем данных из mysql в
>оракл. Был написан скрипт на перле, который очень неплохо работает, пока
>дело не доходит до русских строк.
>
>Из мускула все данные получаем в нормальной форме,

Нормальная - это какая???

> но при попытке вставить
>их в Оракл, он их зачем-то переводит в UTF-8

UTF-8 и есть вообще-то самое нормальное при работе с кодировками...

> и в таком виде уже пытается вставить.
>
>Пробовал менять NLS_LANG, локаль и даже iconv-ом конвертить, но ничего дельного не
>вышло. Может кто сталкивался с такой проблемой?

Совет: если кодировка везде будет UTF-8, то должно быть все хоккей.. т.е. с обеими базами общаться на utf-8, и скрипт тоже должен работать с пониманием того что у него данные utf-8.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Вставка в Oracle через DBI "  
Сообщение от afreet email on 27-Июн-06, 10:42 
>>Привет всем.
>>Столкнулся с такой проблемой, требуется перегнать большой объем данных из mysql в
>>оракл. Был написан скрипт на перле, который очень неплохо работает, пока
>>дело не доходит до русских строк.
>>
>>Из мускула все данные получаем в нормальной форме,
>
>Нормальная - это какая???
>
>> но при попытке вставить
>>их в Оракл, он их зачем-то переводит в UTF-8
>
>UTF-8 и есть вообще-то самое нормальное при работе с кодировками...
>
>> и в таком виде уже пытается вставить.
>>
>>Пробовал менять NLS_LANG, локаль и даже iconv-ом конвертить, но ничего дельного не
>>вышло. Может кто сталкивался с такой проблемой?
>
>Совет: если кодировка везде будет UTF-8, то должно быть все хоккей.. т.е.
>с обеими базами общаться на utf-8, и скрипт тоже должен работать
>с пониманием того что у него данные utf-8.

Нормальная - это либо cp1251, либо тот же utf8 - пробовал по всякому.
Дело в том, что даже в том случае, если мы передаем данные Ораклу в кодировке UTF-8, то он пытается ее повторно перевести в UTF-8, получается непоймичто.

Дополнительно, наблюдается следующая странность:
Админ говорит, что на серваке NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
тем не менее
select USERENV('LANGUAGE') from dual; выдает
USERENV('LANGUAGE')
----------------------------------------------------
RUSSIAN_CIS.CL8ISO8859P5

Таким образом, в случае, если в скрипте я задаю переменную окружения NLS_LANG в RUSSIAN_CIS.CL8ISO8859P5, то Оракл вносит данные не преобразуя кодировки, в случае же с предыдущим NLS_LANG производится преобразование.

Но и в этом случае он ругается, т.к. вставка проходит в неверной кодировке.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Вставка в Oracle через DBI "  
Сообщение от vic (??) on 27-Июн-06, 13:17 
>Нормальная - это либо cp1251, либо тот же utf8 - пробовал по
>всякому.
>Дело в том, что даже в том случае, если мы передаем данные
>Ораклу в кодировке UTF-8, то он пытается ее повторно перевести в
>UTF-8, получается непоймичто.
>
>Дополнительно, наблюдается следующая странность:
>Админ говорит, что на серваке NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
>тем не менее
>select USERENV('LANGUAGE') from dual; выдает
>USERENV('LANGUAGE')
>----------------------------------------------------
>RUSSIAN_CIS.CL8ISO8859P5
>

У вас на серваке 1251, в клиенте 8859p5, а значит он преобразует ваши данные из 8859p5 в 1251. И никак не может преобразовывать из utf8 или в utf8.
В независимости от того в какой у вас кодировке сами данные, если вы в клиенте имеете выставленное 8859p5, он думает что у него кодировка 8859p5 и именно из нее будет при передаче на сервер перекодировать в 1251.
Если на серваке стоит 1251 вам проще будет вытягивать данные из MySQL в 1251 и в клиенте оракла вам нужно выставить 1251. т.е. он на запрос к  dual должен возвращать 1251.


>Таким образом, в случае, если в скрипте я задаю переменную окружения NLS_LANG
>в RUSSIAN_CIS.CL8ISO8859P5, то Оракл вносит данные не преобразуя кодировки, в случае
>же с предыдущим NLS_LANG производится преобразование.

Как же так? У него же на сервере 1251 :)
Если он не преобразует в 1251 из 8859, то будет бред...

>
>Но и в этом случае он ругается, т.к. вставка проходит в неверной
>кодировке.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру