Страница 1 из 1

FreeTDS PHP MSSQL 2005 DateTime

Добавлено: 2009-11-24 15:29:48
BAXTEP
Имеется сервер под FreeBSD 7.2, на нем поднят апач 2.2, пхп 5.2.11 с поддержкой mssql, freetds.
Есть веб приложение написанное на пхп, которое работает с базой лежащий на соседней машине в mssql 2005. Раньше это приложение работало под iis6, сейчас требуется все это перевести на апач и отказаться от windows server.
Все пхп скрипты работают нормально, однако те скрипты которые содержат. к примеру такой запрос к базе: exec mxGetCurItog '01.11.2009', '24.11.2009', выпадают с ошибкой:

Код: Выделить всё

message: Error converting data type varchar to datetime. (severity 16) in /www/....
Если этот же запрос выполнить, скажем в скл студии, то он нормально отрабатывается.
Если в скриптах изменить сам запрос в скриптах на "exec mxGetCurItog '20091101', '20091124'" то скрипт отрабатывает. Идея переписывать куюеву тучу скриптов не айс.
Локаль cp1251 стоит.
Смена tds version с 8.0 на 4.2, не помогло (http://forum.lissyara.su/viewtopic.php? ... 1&p=168612)
Игра с параметрами php.ini параметром mssql.datetimeconvert тоже не дало результатов.

freetds.conf

Код: Выделить всё

node-1# more /usr/local/etc/freetds.conf
[global]
        initial block size = 512
        initial block size = 512
        swap broken dates = no
        try server login = yes
        try domain login = no
        cross domain login = no
        swap broken money = no
        dump file = /tmp/freetds.log
[onlc_192.168.0.7]
        host = 192.168.0.7
        port = 1433
        client charset = CP1251
        tds version = 8.0

Код: Выделить всё

node-1# more /usr/local/etc/locales.conf
[default]
        date format = %Y-%m-%d %H:%M:%S

Код: Выделить всё

node-1# locale
LANG=ru_RU.CP1251
LC_CTYPE="ru_RU.CP1251"
LC_COLLATE="ru_RU.CP1251"
LC_TIME="ru_RU.CP1251"
LC_NUMERIC="ru_RU.CP1251"
LC_MONETARY="ru_RU.CP1251"
LC_MESSAGES="ru_RU.CP1251"
LC_ALL=ru_RU.CP1251

Re: FreeTDS PHP MSSQL 2005 DateTime

Добавлено: 2009-11-25 11:07:50
BAXTEP
Ответ нашелся, хотя и хитрый.
Как выяснилось параметры в файле locales.conf отвечает за формат даты который будет возвращаться в результате запроса, а не на формат даты в самом запросе.
Решение простое, после подключения к БД, выполнить такой запрос:

Код: Выделить всё

$queryText = 'Set language Russian';
$qRes = mssql_query($queryText);
ну при условии, что sql 2005 стоит на винде с русской локалью.

Всем спасибо ;-)

Re: FreeTDS PHP MSSQL 2005 DateTime

Добавлено: 2010-05-27 21:01:27
edyan
BAXTEP писал(а):Ответ нашелся, хотя и хитрый.
Как выяснилось параметры в файле locales.conf отвечает за формат даты который будет возвращаться в результате запроса, а не на формат даты в самом запросе.
Решение простое, после подключения к БД, выполнить такой запрос:

Код: Выделить всё

$queryText = 'Set language Russian';
$qRes = mssql_query($queryText);
ну при условии, что sql 2005 стоит на винде с русской локалью.

Всем спасибо ;-)
И тебе тоже спасибо! Была та же проблема.
Но мы сделали через 'set datetime format dmy'
И тогда локаль не имеет значения.