DBMSでの日付型

DBMSでの日付型 – 新日々此何有哉

うちの周りの人はホストの流儀が染みついているのか、いまだにデータベース(RDBMS)に日付型を使おうとしません。業務的にありえない日付を入れることもあるので、そういうところは仕方ないのですが、「レコードを更新した時間をほどほどの精度(msecより下は不要な程度の)で記録したい」みたいな用途でも、「じゃ文字列に変換して…」という話を聞くたびにがくっとします。

RDBMSの日付型は使った方が良いと思いますが、RDBMSに関わらず日付型の問題はバイナリフォーマットとしての日付型に信頼に足る標準がないというところですね。結局のところそのために何らかの形で結局フォーマット変換が必要で、その変換過程で劣化が起こる可能性もあるわけです。たとえばSQL Server 2008のDateTime2型のデータをCOMベースのシステムで扱うためにVT_DATEに変換した段階で精度劣化が発生します。そう言う点で日付型はかなりやっかいな存在です。変換が必要な以上その元がテキストでもかまわないじゃないかとT-SQLのスクリプトなんか一生書かない人にとってはそう思うわけです。

そもそも、Windowsで「標準」となっている日付型が何種類あるんだろうという状態ですし。

その中でWindows以外のプラットフォームでも使用できそうで、信頼が置けそうな日付のフォーマットとしてはISO 8601があるわけですが、これは結局文字列表記としての標準であって、残念ながらバイナリフォーマットでの標準ではありません。(SQL標準もISO 8601を使用する)

そう言う点で、日付型はやっかいなのでぎりぎりまでテキストで扱おうという気持ちもわからないではありません。ただそうは言ってもバイナリフォーマットの方が効率が良いのは確か、少なくともそのRDBMS内での処理の効率が高いのは確かなのですし、だいたいテキスト保存する場合でもISO 8601なんて意識しないで、アプリケーションのロケール変わったらエラーをすぐに吐くYY/MM/DDなんてフォーマットでテキスト保存してるんでしょうから、バイナリフォーマットの日付型で保存するべきでしょう。

コメントを残す