0

vb.netクライアントが私のOracle11gサーバーからのタイムスタンプを異なる方法で解釈する問題があります。クライアントマシンでVS2010、VB.NET、11.2.0.30ドライバー、WinXPを使用しています。

ソフトウェアは両方のマシンで同一であり、ユーザーはサーバーに対して同じ権限を持っています。

各ユーザーのクレデンシャルを使用してtoadからログインし、SELECT SYSDATEFROMDUALを実行すると; YYYY-MM-DD HH24:MI:SS形式になります。

SELECT SYSDATEFROMDUALを実行するときにアプリケーションを介して; PC1:DD / MM / YYYY HH24:MI:SS PC2:YYYY-MM-DD HH24:MI:SS

YYYY-MM-DD 24HH:MI:SS形式を使用するようにサーバー側の設定を変更しました。一部のPCでのみ設定が無効になるのはなぜですか。どうすればすべてのクライアントで一貫性を保つことができますか?

前もって感謝します。

4

1 に答える 1

1

各クライアントには独自のNLS_DATE_FORMAT設定があり、これはどこかに表示される場合(Toadなど)に設定される場合や、プラットフォームまたはドライバーによってデフォルト設定される場合があり、ロケール設定を介して間接的に継承される場合があります。NLS_TIMESTAMP_FORMATデフォルトでオーバーライドされることはあまり一般的ではないと思いますが、時間コンポーネントもあるOracleTIMESTAMPまたはを参照しているかどうかはわかりません。DATE

クライアント設定は常にサーバー設定を上書きするため、サーバーを変更しても効果がない可能性があり、一致する形式で既に設定されているクライアントがある場合があります。alter sessionクライアント設定自体は、セッションレベルでコマンドを使用して接続した後、またはSQLステートメントで個別にオーバーライドできます。優先順位は、グローバリゼーションサポートガイドに示されています。

一般に、暗黙的なデータ変換に依存しないでください。単純なアドホッククエリを除いて、日付は通常、明示的な日付形式のマスクを使用して表示するために選択されますselect to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual。日付が特定の形式で(文字列として)返されることを期待するアプリケーションがある場合は、それを行う方が安全です...通常は、DATE元に戻して、とにかくクライアントにフォーマットを実行させます。

呼び出しで文字列からデータを挿入するときは常にフォーマットマスクを指定することがさらに重要ですto_date()が、クライアントは通常それを処理して。を渡しますDATE

于 2013-01-09T21:16:49.830 に答える