Вставка русских символов из perl в oracle - PullRequest
1 голос
/ 24 декабря 2010

Я пытаюсь вставить (используя Perl 5.8) русские символы в базу данных оракула, для которой установлено:

1 NLS_LANGUAGE RUSSIAN
2 NLS_TERRITORY CIS
3 NLS_CURRENCY р.
4 NLS_ISO_CURRENCY CIS
5 NLS_NUMERIC_CHARACTERS , 
6 NLS_CALENDAR GREGORIAN
7 NLS_DATE_FORMAT DD.MM.RR
8 NLS_DATE_LANGUAGE RUSSIAN
9 NLS_CHARACTERSET AL32UTF8
10 NLS_SORT RUSSIAN
11 NLS_TIME_FORMAT HH24:MI:SSXFF
12 NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
13 NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
14 NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
15 NLS_DUAL_CURRENCY р.
16 NLS_NCHAR_CHARACTERSET AL16UTF16
17 NLS_COMP BINARY
18 NLS_LENGTH_SEMANTICS BYTE
19 NLS_NCHAR_CONV_EXCP FALSE

Прежде чем открывать соединение через DBD :: Oracle, я устанавливаю свой perl env. до

$ ENV {NLS_LANG} = 'AMERICAN_AMERICA.AL32UTF8'

Однако по какой-то причине русские символы неправильно отображаются в БД. Кто-нибудь может посоветовать почему?

Спасибо

1 Ответ

0 голосов
/ 26 декабря 2010

Трудно диагностировать, что происходит без полного набора продуктов и ОС, задействованных как в операциях вставки, так и в операциях выбора.У меня были похожие проблемы с символом евро, и потребовалось несколько дней, чтобы получить полную картину.Он включал в себя кодирование замазкой, локаль Linux, сеансы Linux NLS_LANG, кодовую страницу Windows, кодовые страницы Windows CMD и используемые символьные шрифты, а также сеанс Windows NLS_LANG.Если вы занимаетесь веб-программированием, кодирование страниц и httpd может быть другим фактором.Убедитесь, что в базе данных все в порядке, вставляя через стек продуктов и получая через другой.Я настроил его так, чтобы я мог вставлять / выбирать одни и те же данные с любой комбинацией Linux, Windows и Windows CMD, в качестве проверки того, что они попадают прямо в БД.Если вы используете только одну систему, вы можете вставить €, получить € и не понимать, что БД хранит то, что она не распознает как €.Это остается незамеченным до тех пор, пока ....

Также в отношении ввода / вывода текста следует использовать кодировку локали вашего ОС / веб-сервера в NLS_LANG, а не в БД.Например в Windows обычно MSWINxxxx.Преобразование в AL32UTF8 выполняется для вас sqlnet.

...