Server

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

anncaによるPixabayからの画像

 

 

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

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

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

 

 

様々なデータ型

種別データ型説明サイズ(バイト)
整数型tinyint0 ~ 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
time1日の時刻のみを格納し、精度は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まで)
その他bit1, 0, NULL のどれか1
tableSELECT文実行結果のテーブルを格納可能実際のデータ量
XMLXMLデータを格納可能 
uniqueidentifier16バイトのGUID(グローバルユニークID)16
timestamp
(rowversion)
テーブルのデータが更新される度に加算されるカウンタ(行バージョンを格納)8
sql_variant複数のデータ型を格納可能実際のバイト数

 

 

データ型使用する
サイズ
(バイト数)
扱える数値の範囲
tinyint10 ~ 255
smallint2-32,768 ~ 32,767
(おおよそ -3万から3万)
int4-2,147,483,648 ~ 2,147,483,647
(おおよそ -20億から20億)
bigint8-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 (フィールド名) (変更データ型)

 

で変更できるようです。

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

 

 

-Server
-, ,

Translate »

© 2024 PCTips