Поискал по форуму, что-то ответа не нашел. Подскажите, что я не так делаю:
.settings.php (по умолчанию БД MySQL)
1. Добавил в 'connections'
'oracle' =>
array(
'className' => '\\Bitrix\\Main\\DB\\OracleConnection',
'database' => '(DESCRIPTION = .....
2. сам скрипт
$connection = Bitrix\Main\Application::getConnection('oracle');
$sql = "SEL ECT * FR OM test.arrivals WHERE ROWNUM < 3 ORDER BY adate DESC";
$recordset = $connection->query($sql);
while ($record = $recordset->fetch()) { var_dump($record); }
данные получает, но, национальные символы идут как '?'
Array
(
[NREC] => 6807
[ORAUSER] => CMK_CYGANKOV
[NUM] => 126
[ADATE] => Bitrix\Main\Type\DateTime Object
(
[value:protected] => DateTime Object
(
[date] => 2017-06-29 00:00:00.000000
[timezone_type] => 3
[timezone] => Asia/Yekaterinburg
)
)
[ANUM] => 02517/306 ???? 1.07.2017
[ACTIVE] => 0
[NCOUNTER] => 10
)
И все мои попытки это исправить ничего не дают. В sqlplus на самом WEB сервере все нормально, отображает.
пробовал играться с кодировками сессии:
$connection->queryExecute("ALTER SESSION SET NLS_LANGUAGE='RUSSIAN'");
начинает ругаться на дату
[Bitrix\Main\ObjectException]
Incorrect date/time: 29-???-17 00:00:00 (500)
/home/bitrix/ext_www/mb-test.mrk/bitrix/modules/main/lib/type/datetime.php:45
варианты с
$connection->queryExecute("ALTER SESSION set NLS_DATE_FORMAT='YYYY-MM-DD'"); и по разному, не помогают
[Bitrix\Main\ObjectException] Incorrect date/time: 2017-06-29 00:00:00 (500)
/home/bitrix/ext_www/mb-test.mrk/bitrix/modules/main/lib/type/datetime.php:45
Кардинально спасает правка
bitrix\modules\main\lib\db\oracleconnection.php
путем изменения функции:
protected function connectInternal()
$connection = oci_new_connect($this->login, $this->password, $this->database); ->
$connection = oci_new_connect($this->login, $this->password, $this->database, 'AL32UTF8');
Array(
[NREC] => 6807
[ORAUSER] => CMK_CYGANKOV
[NUM] => 126
[ADATE] => Bitrix\Main\Type\DateTime Object
(
[value:protected] => DateTime Object
(
[date] => 2017-06-29 00:00:00.000000
[timezone_type] => 3
[timezone] => Asia/Yekaterinburg
)
)
[ANUM] => 02517/306 Июль 1.07.2017
[ACTIVE] => 0
[NCOUNTER] => 10
)
Но править модуль это совсем плохо. Может подскажите, как справиться с кодировкой?
.settings.php (по умолчанию БД MySQL)
1. Добавил в 'connections'
'oracle' =>
array(
'className' => '\\Bitrix\\Main\\DB\\OracleConnection',
'database' => '(DESCRIPTION = .....
2. сам скрипт
$connection = Bitrix\Main\Application::getConnection('oracle');
$sql = "SEL ECT * FR OM test.arrivals WHERE ROWNUM < 3 ORDER BY adate DESC";
$recordset = $connection->query($sql);
while ($record = $recordset->fetch()) { var_dump($record); }
данные получает, но, национальные символы идут как '?'
Array
(
[NREC] => 6807
[ORAUSER] => CMK_CYGANKOV
[NUM] => 126
[ADATE] => Bitrix\Main\Type\DateTime Object
(
[value:protected] => DateTime Object
(
[date] => 2017-06-29 00:00:00.000000
[timezone_type] => 3
[timezone] => Asia/Yekaterinburg
)
)
[ANUM] => 02517/306 ???? 1.07.2017
[ACTIVE] => 0
[NCOUNTER] => 10
)
И все мои попытки это исправить ничего не дают. В sqlplus на самом WEB сервере все нормально, отображает.
пробовал играться с кодировками сессии:
$connection->queryExecute("ALTER SESSION SET NLS_LANGUAGE='RUSSIAN'");
начинает ругаться на дату
[Bitrix\Main\ObjectException]
Incorrect date/time: 29-???-17 00:00:00 (500)
/home/bitrix/ext_www/mb-test.mrk/bitrix/modules/main/lib/type/datetime.php:45
варианты с
$connection->queryExecute("ALTER SESSION set NLS_DATE_FORMAT='YYYY-MM-DD'"); и по разному, не помогают
[Bitrix\Main\ObjectException] Incorrect date/time: 2017-06-29 00:00:00 (500)
/home/bitrix/ext_www/mb-test.mrk/bitrix/modules/main/lib/type/datetime.php:45
Кардинально спасает правка
bitrix\modules\main\lib\db\oracleconnection.php
путем изменения функции:
protected function connectInternal()
$connection = oci_new_connect($this->login, $this->password, $this->database); ->
$connection = oci_new_connect($this->login, $this->password, $this->database, 'AL32UTF8');
Array(
[NREC] => 6807
[ORAUSER] => CMK_CYGANKOV
[NUM] => 126
[ADATE] => Bitrix\Main\Type\DateTime Object
(
[value:protected] => DateTime Object
(
[date] => 2017-06-29 00:00:00.000000
[timezone_type] => 3
[timezone] => Asia/Yekaterinburg
)
)
[ANUM] => 02517/306 Июль 1.07.2017
[ACTIVE] => 0
[NCOUNTER] => 10
)
Но править модуль это совсем плохо. Может подскажите, как справиться с кодировкой?