パソコン情報

SQLserverテーブル作成時のデータ型についての備忘録

anncaによるPixabayからの画像

 

 

データを扱う上で必ずデータの型と言うのがでてきます。

実際、SQLserverで自分が扱おうとしているデータに対してどの型を使ったらいいのか?悩みますよね。

備忘録としてまとめてみました。

 

 

様々なデータ型

種別 データ型 説明 サイズ(バイト)
整数型 tinyint 0 ~ 255 の範囲の数値 1
smallint おおよそ -3万 ~ 3万の範囲の数値 2
int おおよそ -20億 ~ 20億の範囲の数値 4
bigint おおよそ -900京 ~ 900京の範囲の数値 8
小数
(真数型)
decimal(p, s) p:全体桁数 s:小数点以下桁数
固定長の有効桁数と小数点以下桁数を持つため誤差は発生しない(10進数)
5 ~ 17
numeric(p, s)
小数
(概数型)
float(n) n:仮数のビット数 浮動小数点数 4 ~ 8
real 浮動小数点数 4
文字列 char(n) 固定長文字列(8000バイトまで) n
varchar(n) 可変長文字列(8000バイトまで) 実際のバイト数 + 2
varchar(max)
text
可変長文字列(2GBまで)
Unicode文字列 nchar(n) Unicode固定長文字列(8000バイトまで) 2n
nvarchar(n) Unicode可変長文字列(8000バイトまで) (実際のバイト数) * 2 + 2
nvarchar(max)
ntext
Unicode可変長文字列(2GBまで)
日付 smalldatetime 精度:1分 4
datetime 精度:3.33ミリ秒 8
date 精度:1日 3
time 1日の時刻のみを格納し、精度は100ナノ秒 3~ 5
datetime2 精度:100ナノ秒 6 ~8
datetimeoffset 精度:100ナノ秒 タイムゾーン付き 8 ~10
金額・通貨 smallmoney 金額や通貨を表す(範囲狭) 4
money 金額や通貨を表す(範囲広) 8
バイナリ binary(n) 固定長バイナリデータ(8000バイトまで) n
varbinary(n) 可変長バイナリデータ(8000バイトまで) 実際のバイト数 + 2
varvinary(max)
image
可変長バイナリデータ(2GBまで)
その他 bit 1, 0, NULL のどれか 1
table SELECT文実行結果のテーブルを格納可能 実際のデータ量
XML XMLデータを格納可能  
uniqueidentifier 16バイトのGUID(グローバルユニークID) 16
timestamp
(rowversion)
テーブルのデータが更新される度に加算されるカウンタ(行バージョンを格納) 8
sql_variant 複数のデータ型を格納可能 実際のバイト数

 

 

データ型 使用する
サイズ
(バイト数)
扱える数値の範囲
tinyint 1 0 ~ 255
smallint 2 -32,768 ~ 32,767
(おおよそ -3万から3万)
int 4 -2,147,483,648 ~ 2,147,483,647
(おおよそ -20億から20億)
bigint 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
(おおよそ -900京から900京)

 

 

よく使いそうなデータ型の分類

 

●char
固定長の半角文字列を格納。
(数字ですが)JAN コードや、空港コードなど。

●nchar
固定長の全角文字列を格納。
いい例が思いつきませんが、例えば会社の部署全てに漢字 2 文字の略称(営管、開1、等)を付与している場合。

●varchar
可変長の半角文字列を格納。
英語の商品名や、ローマ字の氏名など。

●nvarchar
可変長の全角文字列を格納。
日本語の商品名や漢字の氏名、日本語でのメモなど、日本語環境では使用頻度が高いと思われます。

名称は、以下のような規則になっています。
char/nchar ⇒ 固定長
varchar/nvarchar ⇒ 可変長
n付 ⇒ Unicode 対応(全角文字がある場合に推奨)
n無 ⇒ ASCII 対応(半角英数字記号)

 

 

テーブルのデータ型の変更

 

既に作成してしまったテーブルのデータ型を変更したい場合がありますよね。

データが入力されてない状態なら簡単に変更できますが、既に入力してあるテーブルなどのフィールドのデータ型を変えるには、

 

alter table (テーブル) alter column (フィールド名) (変更データ型)

 

で変更できるようです。

もちろん、文字列を無理やり違うデータ型にしたりするとエラーが出ますので、既に入力済のデータが変更後のデータ型でも使えるようなデータ内容でないと変換は無理ですね。