思考停止するな

ネットワークとかアプリケーションとかWebとか

SQLSereverのCREATE TABLE文のカラム定義のサイズについて

スポンサーリンク

SQLSereverのCREATE TABLE文のカラム定義のサイズについてです。

SQLSereverのCREATE TABLE文のカラム定義のサイズはバイトにするか文字数にするかはデータ型によって決まっているらしい。

文字列の長さを求める関数は2つあるらしい。

LEN関数
指定された文字列式の、末尾の空白を除いた文字数を返す。

DATALENGTH関数
バイト数を返す。

主なデータ型の説明は以下にまとめてみた。

CHAR Unicodeではない固定長の文字列データを格納。バイト数で指定。半角文字は1文字1バイト、全角文字は1文字2バイト。指定できる値の範囲は1~8,000バイト。足りない分は半角スペースで埋められる。
VARCHAR Unicodeではない可変長の文字列データを格納。バイト数で指定。半角文字は1文字1バイト、全角文字は1文字2バイト。指定できる値の範囲は1~8,000バイト。
NCHAR 固定長のUnicode文字列データを格納。Unicodeでは半角だろうが全角だろうが1文字を2バイトで表現。文字数で指定。指定できる値の範囲は1~4,000バイト。nバイト×2。足りない分は半角スペースで埋められる。
NVARCHAR 可変長のUnicode文字列データを格納。Unicodeでは半角だろうが全角だろうが1文字を2バイトで表現。文字数で指定。指定できる値の範囲は1~4,000バイト。文字数×2+2バイト。
DATE yyyy-mm-dd。0001-01-01 ~ 9999-12-31。3バイト。
DATETIME YYYY-MM-DD hh:mm:ss。8バイト。
DATETIME2 YYYY-MM-DD hh:mm:ss[.nnnnnnn]。バイト数はミリ秒以下有効桁数の制度により異なる。

ちなみにOracleも同様のことを調べてまとめたのが以下。
shimonss.hatenablog.com