Unicode???? 8-[ ]

iii

Guest
Unicode???? 8-[ ]

Поздравляю всех с прошедшеми!



Объясните мне пожалуйста, что за фигня у меня происходит!!!
Запппрос:
select 98765432 as ONE, '1234567890' as TWO FROM table

Переменные окружения:
putenv('ORACLE_BASE=/oracle/app/oracle');
putenv('ORACLE_HOME=/oracle/app/oracle/product/8.0.5');
putenv('LD_LIBRARY_PATH=/oracle/app/oracle/product/8.0.5/lib:/us
putenv('LC_ALL=C');
putenv('NLS_LANG=AMERICAN_CIS.CL8MSWIN1251');
// putenv('NLS_LANG = AMERICAN_AMERICA.US7ASCII');
//Последние две строчки - пробовал и так и так

После выполнения получаю:
Первая колонка Все OK получаю '98765432'
Вторая колонка ' 1 2 3 4 5' Причем выдается через раз т.е на каждые два значения из первой колонки приходится одно значение из второй колонки.
Если к второй колонке применить urlencode (....);
ТО получаю соответственно:
%001%002%003%004%005

Об'ясните что это за фигня и как ее побороть!!!!!!
(Хочу в итоге получить сp1251)
 

iii

Guest
select * from sys.v_$nls_parameters.
Из SQL PLus:
PARAMETER
------------------------
VALUE
------------------------
NLS_LANGUAGE
AMERICAN
NLS_TERRITORY
CIS
NLS_CURRENCY
р.
NLS_ISO_CURRENCY
CIS
NLS_NUMERIC_CHARACTERS
,
NLS_CALENDAR
GREGORIAN
NLS_DATE_FORMAT
DD.MM.YY
NLS_DATE_LANGUAGE
AMERICAN
NLS_CHARACTERSET
CL8MSWIN1251
NLS_SORT
BINARY
NLS_NCHAR_CHARACTERSET
CL8MSWIN1251

Значение phpinfo()
NLS_LANG AMERICAN_CIS.CL8MSWIN1251
ORA_NLS32 /oracle/app/oracle/product/8.0.5/ocommon/nls/admin/data
ORA_NLS33 /oracle/app/oracle/product/8.0.5/ocommon/nls/admin/data

Я тут попорбовал такой запрос:
select 98765432 as ONE, 'is1234567890' as TWO,'Крокодил' as TREE FROM table

Получаю:
98765432
98765432 is1234 Jpnj
98765432
98765432 is1234 Jpnj
98765432
98765432 is1234 Jpnj
98765432
98765432 is1234 Jpnj
98765432
98765432 is1234 Jpnj

Ну и вторая и Третья колонка в стиле: %00i%00s%001%002%003%004

Еще одно замечание:
Если на страничке со скриптом сделать RELOAD ( Иногда лишь после второго или третьего) то возникает ошибка:
OCISessionBegin: ORA-12705: invalid or unknown NLS parameter value specified

Связка ORACLE 8.05, Php4.1.0 (mod), Apache x20(rus)( перекодировку уже отключил)

Вот такие пироги ж((((((((((((((((((((((((((((((((((((
 

iii

Guest
Из скрипта:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET CL8MSWIN1251
NLS_SORT BINARY
NLS_NCHAR_CHARACTERSET CL8MSWIN1251

>telnet localhost 80
>HEAD / HTTP/1.0
Чего то я не понял. Как посмотреть заголовок? Когда я запускаю telnet таким образом, он просто ждет дальнейшего ввода и все ( Ничего не говорит).

Я заметил еще одну особенность.
в информации Которую выдает PHPinfo() Есть раздел PHP Variables.
Там приводится два Массива SERVER['.....'] и _ENV['....']. Так вот, Значения NLS_LANG, ORA_NLS3x и т.д., применительно к этому разделу, приводятся как SERVER['NLS_LANG']=.........., SERVER['ORA_NLSxx']=..........

И еще вопрос, а как определить корректность оракловых файлов перекодировки?
 

iii

Guest
>У меня такое ощущение, что ты устанавливаешь переменные окружения >после того как сделано подключение к базе. Хотя может быть переменные >окружения влияют на начальную инициализацию библиотеки OCI и потом >попросту насрать, что ты там в ENV добавляешь. Я предпочитаю выставить >все переменные _до_ старта апача, и не пользоваться putenv вообще.

Кинь пример как ты это делаешь?
Я выставляю все переменные с помощью putenv, естественно в начале скрипта, до подключения к Ораклу ( до функции
$db=OCILogon('qwert','zxcv','asdf');)
 

iii

Guest
ЗАРАБОТАЛО!!!!!!!!!!!!!!!!!!!!!!!!!!
Ты оказался прав.
Oracle - этот му#@$ Избирательно работает с переменными окружения.
Те. переменные ORACLE_BASE ORACLE_HOME LD_LIBRARY_PATH ORACLE_SID Можно выставлять из Скрипта с помощью putenv - все будет нормально. А вот NLS_LANG ORA_NLSxx - НЕЛЬЗЯ
Их имеет смысл выставлять только до Apacha
Я просто поправил *apachectl
добавил
ORA_NLS33=/oracle/app/oracle/product/8.0.5/ocommon/nls/admin/data
NLS_LANG=AMERICAN_CIS.CL8MSWIN1251

ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/product/8.0.5
ORACLE_SID=asdf

export NLS_LANG ORA_NLS33 ORACLE_HOME ORACLE_SID ORACLE_TERM ORACLE_BASE

Кстати SetEnv в httpd.cong - не проходит.
 
Сверху