Portál AbcLinuxu, 8. května 2025 04:55

Dotaz: Format polozky datetime pri komunikaci s MSSQL

8.6.2010 07:50 Mirekh
Format polozky datetime pri komunikaci s MSSQL
Přečteno: 3156×
Odpovědět | Admin
DD,

mam php skript, ktery komunikuje z linuxu s mssql DB na Windows server 2003.

Dotaz mj. selektuje polozku, ktera je na mssql typu datetime - konkretne hodnota je napr. 2010-06-08 06:25:19 (to vidim pres SQL Management Studio).

Kdyz spustim skript na stavajicim serveru Debian sarge, vrati dotaz polozku ve formatu: Tue Jun 8 06:25:19 2010

Kdyz skript spustim na cerstve nainstalovanem debian etch, polozka ma format Jun 8 2010 06:25AM

Nevim cim je ovlivneno to, ze se formaty lisi

locale je na sarge nastaveno na cs_CZ ISO-8859-2

locale na etch je nastaveno na cs_CZ.UTF-8 UTF-8

D.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Petr Kočvara avatar 8.6.2010 09:30 Petr Kočvara | skóre: 16 | Frýdek-Místek
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předpokládám, že na mssql lezeš pomocí freetds, tak se zkus podívat na jeho konfiguraci, jestli je stejná (/etc/freetds.conf). Dále na to má vliv konfigurační direktiva mssql_datetimeconvert v php.ini. Osobně na datetime položky používám funkci CONVERT na MSSQL ať mám kontrolu nad výsledkem dotazu. Petr
8.6.2010 09:43 Mirekh
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
ja pouzivam sybase

na sarge php4-sybase

na etch php5-sybase
Petr Kočvara avatar 8.6.2010 10:17 Petr Kočvara | skóre: 16 | Frýdek-Místek
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
Tak s tímto modulem nemám zkušenost. Nicméně bych hledal potíž v locale a jeho nastavení pro zobrazení data a času. Zkusil bych přímo ve skriptu si přepnout nastavení locale pomocí funkce setlocale().
okbob avatar 8.6.2010 14:06 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
Odpovědět | | Sbalit | Link | Blokovat | Admin
MSSQL by měl bez ohledu na nastavení rozpoznat ISO formát - tedy YYYY-MM-DD

Pavel
9.6.2010 14:52 Mirekh
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
tak jsem si s tim trosku pohral a zjistil jsem nasledujici.

funkce setlocale neni rozhodujici:

Etch: pri locales en_UTF8 je vysledek Jun 8 2010 06:25AM

pri setlocale(LC_TIME,'cs_CZ') je cen 8 2010 06:25

Sarge: pri locales en_UTF8 je vysledek Tue Jun 8 06:25:19 2010

pri setlocale(LC_TIME,'cs_CZ') Ut cen 8 06:25:19 2010

- hlavni rozdil je v uvedeni/ neuvedeni nazvu dne - u Sarge se zobrazi u Etch ne - to tak je - a setlocale v php toto (pritomnost nazvu dne) urcite neovlivnuje
okbob avatar 9.6.2010 16:26 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
Popravdě řečeno, celé je to na draka a vůbec se nedoporučuje programovat tak, aby chod aplikace záležel na systémovém nastavení. Minimálně v PostgreSQL a v Oracle se doporučuje používat funkci to_date - kde explicitně udávám formát
to_date('2010-06-09','YYYY-MM-DD')
a vaše aplikace pojede, bez ohledu na zásahy admina. V MSSQL funkce konvert

http://stackoverflow.com/questions/2569998/to-date-in-sql-server-2005

jinak oprava - v případě ISO formátu u MSSQL se nepoužívají separátory - tudíž dnešek by měl být '20100609' - cast na date by měl fungovat bez ohledu na locales

9.6.2010 16:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Format polozky datetime pri komunikaci s MSSQL
Odpovědět | | Sbalit | Link | Blokovat | Admin
V php.ini nastavte mssql.datetimeconvert = Off,
bude tam mssql.datetimeconvert = On nebo to tam nebude vůbec a default je On.
A restartněte apache.
Pak by se to mělo vracet ve formátu YYYY-MM-DD HH:MM:SS - nepletu-li se
Pokud vkládáte data a nepoužíváte fce je nejvhodnější formát:
YYYY-MM-DDTHH:MM:SS nebo YYYY-MM-DD (to 'T' je prostě ).
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.