さまざまな種類の RDBMS と通信するアプリケーションの分散システムを計画しています。要件の 1 つは、すべての RDBMS タイプで一貫した DateTime の処理です。すべての DateTime 値はミリ秒の精度である必要があり、TimeZone 情報を含め、1 つの列に格納する必要があります。
異なる RDBMS では日付と時刻の処理が異なるため、この場合、ネイティブの列の型に依存できないのではないかと心配しているため、別の解決策を考え出す必要があります。(ここで間違っていたら、道を教えてください。)
ソリューションは、それが何であれ、理想的には、SQL レベルでの簡単な並べ替えと比較を可能にする必要があります。読みやすさや SQL 日時関数を使用する機能など、その他の側面は重要ではありません。これはすべてゲートウェイ サービスによって処理されるためです。
DateTime 値を unsigned largeint 列型 (8 バイト) に格納するというアイデアをいじっています。問題のすべての RDBMS (MSSQL、Oracle、DB2、PostgreSQL、MySQL、おそらくその他のいくつか) が実際にそのようなタイプを /持っているかどうかは確認していませんが、現時点では、そうであると想定しています。
格納形式については...たとえば、2009-01-01T12:00:00.999+01:00 は ?20090101120000999?? のように格納でき、8 バイト未満になります。
この方法で保存できる最小の DateTime は 0001-01-01T00:00:00.000+xx:xx で、最大は 8000-12-31T23:59:59.999+xx:xx です。十分なスパンです。
unsigned largeint の最大値は 18446744073709551615 であるため、TimeZone 情報を格納するために次の 3 桁 (A と BB でマーク) が残ります: AxxxxxxxxxxxxxxxxxBB.
0001..8000 の最大年スパンを考慮すると、A は 0 または 1 のいずれかになり、BB は 00 から 99 のいずれかになります。
そして今、質問:
私の提案した解決策についてどう思いますか? それにはメリットがありますか、それとも単にばかげているだけですか?
他に良い方法がない場合、残りの 3 桁を TimeZone 情報に最適に使用するにはどうすればよいでしょうか?