PHP oci select возвращает округленное значение с плавающей точкой в ​​Windows Apache - PullRequest
0 голосов
/ 27 августа 2011

У меня странная проблема при запросе базы данных Oracle. Я получаю разные результаты для одной и той же логики, но для двух разных установок Windows Apache, которые, насколько я знаю, на самом деле имеют одинаковую версию и конфигурацию.

Проблема в том, что, когда я выбираю 3 столбца (Число (10), Число (10), Число (10,4)) из таблицы, один и тот же запрос возвращает правильные десятичные числа на одном компьютере для столбца № 3, а на другом машина удаляет десятичные дроби и я получаю только всю часть числа.

Я понятия не имею, какие настройки управляют тем, как Oracle возвращает тип данных Number (10,4), я не вижу различий в настройках клиента Oracle, Apache и PHP на двух машинах.

Что может быть причиной этого?

Спасибо,

Илья

1 Ответ

3 голосов
/ 29 августа 2011

Поняв это, я заметил, что на машине, которая выглядела как php oci oracle query, "пропускает" десятичные дроби, это фактически разделение десятичных знаков запятой, а не точкой. Это было связано с настройками NLS для отображения числа.

Существует 3 уровня настроек NLS: БАЗА ДАННЫХ , INSTANCE и SESSION . СЕССИЯ имеет самый высокий приоритет. Таким образом, чтобы число отображалось в обычном формате как 1234,56, где тысячи разделяются запятой и десятичными числами через точку, нам нужно установить * NLS_NUMERIC_CHARACTERS * в '.,' С помощью следующей команды:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...