スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OracleDBのNUMBER型項目のバイト数

DB設計とかの上流工程を担当したことがなかったので、NUMBER型項目のサイズで必要な値は精度(全体の桁数)とスケール(小数点以下の桁数)だけだった。

以前からDB設計書とかちら見しては「なんでこの桁数の項目に、こんなバイト数なんだ?」と不思議に思っていた事はある。
数字なんて符号+桁数で2桁=1バイトが正しいんじゃないか?と。
(UTF-8使うようになって全角日本語が1文字3バイト必要になったりしたのもまた「なんでだよw2バイト文字じゃねーのかよ」って感じなのに。)

今回たまたまEUCの設計をするので、ちょこっと調べてみたら、なんとなくガッテンしたのでメモ。

OracleのNUMBER型は内部数値形式としてn×10^e(nかける10のe乗)形式で保存される。
なので123は1.23×10^2となり、格納するのに必要なバイト数は数値部(1、2、3)で2バイト+指数部(2)が1バイトで、合計3バイト。
1000だと1×10^3となり、格納するのに必要なバイト数は数値部(1)が1バイト+指数部(3)が1バイトで、合計2バイトになる。
ちなみにマイナスの値は-123だと-1.23×10^2となり数値部に(-、1、2、3)+指数部(2)が1バイトで、合計3バイトのようになる。

以上の事から、数値1桁、符号小数部なしの項目は設計上2バイト、符号付きでも2バイト。
しかし、数値2桁だと符号なしは2バイト、符号付きだと3バイトっていう事になる。
一見整合性がないように見えるが、ちゃんと整合性とれてた。
やっぱりちゃんと上流工程から理解しとかないとまずいなぁ。

文字列としての保存じゃないから、この方が小数点以下の扱いについて分かりやすいのかもしれない。

まぁ俺の理解が間違ってるだけの可能性もかなり高いけど、個人的にスッキリしたからOKとしよう。

theme : Oracle関連
genre : コンピュータ

comment

Secret

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
最近の記事
最近のコメント
最近のトラックバック
カテゴリー
過去ログ
食べログ
プロフィール

JUN

Author:JUN
プログラムみたいなもの組んだりする仕事してるおっさん。子持ち。ベガルタを生暖かい目で見守る日々。ブランメル時代の殺伐とした応援が少し懐かしくもある今日この頃。

つぶやき
人気記事
RSSフィード
リンク
VEGALTA
その他


モリタポの寄付
J . B . A n t e n n a - VEGALTA SENDAI -
にほんブログ村 サッカーブログ ベガルタ仙台へ
にほんブログ村 グルメブログ B級グルメへ
にほんブログ村 子育てブログ パパの育児へ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。