SQLのデータ型は数が多いこともあり、全てを覚えておくことは難しいため、利用する機会に都度確認が必要です。
本記事では、SQLのデータ型でよく利用される型を、一覧で確認出来るようにまとめました。
SQLのデータ型1: 文字列
文字列を格納するためのデータ型には大きく分けて「固定長文字列」と「可変長文字列」の2種類が提供されています。
CHAR型
CHAR型は「固定長文字列」に該当するデータ型で、決められたデータサイズの領域を確保します。
指定したデータサイズ以上の文字列は格納することが出来ず、データサイズが不足する場合には、空白で指定したデータサイズまでの領域を埋めることになります。
VARCHAR型
VARCHAR型は「可変長文字列」に該当するデータ型で、格納する文字列により確保するデータサイズを変更出来ます。
CHAR型のように、指定したデータサイズまで空白で埋めるような処理が行われないため、文字列に適したデータサイズをデータベースが自動的に確保してくれます。
サンプル
テーブル作成する際は下記のように指定します。
CREATE TABLE テーブル名(カラム名 CHAR(データサイズ), カラム名 VARCHAR(データサイズ);
「sample_table」というテーブル名で、最大10文字までのサイズを定義した「CHAR」と「VARCHAR」のカラムを作成する場合、下記のコマンドとなります。
CREATE TABLE sample_table(col1 CHAR(10), col2 VARCHAR(10));
SQLのデータ型2: 整数
整数型では、扱う数値の大きさにより指定するデータ型を変更します。
TINYINT型
- 符号付きの場合「-128 ~ 127」
- 符号なしの場合「0 ~ 255」
SMALLINT型
- 符号付きの場合「-32768 ~ 32767」
- 符号なしの場合「0 ~ 65535」
MEDEUMINT型
- 符号付きの場合「-8388608 ~ 8388607」
- 符号なしの場合「0 ~ 16777215」
INT型
- 符号付きの場合「-2147483648 ~ 2147483647」
- 符号なしの場合「0 ~ 4294967295」
BIGINT型
- 符号付きの場合「-9223372036854775808 ~ 9223372036854775807」
- 符号なしの場合「0 ~ 18446744073709551615」
サンプル
整数型の場合は、データサイズを記入する必要はなく、型の名前を定義するだけです。
※数値幅を指定して意図したサイズまでしか格納させないようにすることも可能です。
符号なしの指定を行いたい場合には、データ定義の後に「UNSIGNED」を付与します。
CREATE TABLE テーブル名(カラム名 TINYINT, カラム名 INT(4) UNSIGNED);
「int_sample」というテーブル名で、1つ目のカラムを「TINYINT」、2つ目のカラムをINT型で4桁までの符号なしと定義する場合、下記のようになります。
CREATE TABLE int_sample(col1 TINYINT, col2 INT(4) UNSIGNED);
SQLのデータ型3: 浮動小数点
浮動小数点は、正確な数値ではなく計算で誤差が生じることを前提とした数値データのことを指します。
浮動小数点では、近似値で計算を行う分、広い範囲のデータを扱うことが可能です。
一般的にプログラム制作においては、小数を含むデータはこの浮動小数点型を利用します。
FLOAT型
FLOAT型は、単精度浮動小数点型と呼ばれ、小数第7位までの値を正確に表すことが出来るとされています。
- 符号付きの場合「-3.402823466E+38 ~ -1.175494351E-38」
- 符号なしの場合「0」、「1.175494351E-38 ~ 3.402823466E+3」
DOUBLE型
DOUBLE型は、倍精度浮動小数点型と呼ばれ、小数第15位までの値を正確に表すことが出来るとされています。
- 符号付きの場合「-1.7976931348623157E+308 ~ -2.2250738585072014E-308」
- 符号なしの場合「0」、「2.2250738585072014E-308 から 1.7976931348623157E+308」
近年のプログラム開発においては「DOUBLE型」を使うことが多いようです。
最近のコンピューターにはDOUBLE型を専門に扱う回路が搭載されていることも多いようで、「精度が高い」「処理速度が速い」の理由から選択されています。
メモリサイズにおいては、FLOAT型に軍配が上がりますが、最近のコンピューターのメモリ量であれば考慮する必要はほとんどありません。
サンプル
浮動小数点型では、格納可能な値の範囲があらかじめ決まっているためデータの範囲を指定する必要はありません。
ただ、表示する桁数の合計と小数点以下の桁数を指定することが可能となっています。
CREATE TABLE テーブル名(カラム名 FLOAT [UNSIGNED], カラム名 DOUBLE[(桁数合計, 小数点桁数)]);
「float_sample」というテーブル名で、1つ目のカラムを符号なし、2つ目のカラムを桁数合計が8桁の小数点が2桁と定義して作成する場合、下記のコマンドとなります。
CREATE TABLE float_sample(col1 FLOAT UNSIGNED, col2 DOUBLE(8, 2));
SQLのデータ型4: 日付・時刻
SQLでデータを格納する際、日付・時刻型を利用することも多いので頻出のデータ型を抑えておきましょう。
DATE型
日付を格納するためのデータ型で、デフォルトフォーマットは「YYYY-MM-DD」と設定されています。
「1000-01-01」から「9999-12-31」までの値が格納可能です。
DATETIME型
日付と時刻を格納するデータ型で、デフォルトフォーマットは「YYYY-MM-DD HH:MM:SS[…]」と設定されています。
「1000-01-01 00:00:00.000000」から「9999-12-31 23:59:59.999999」までの値が格納可能です。
TIMESTAMP型
DATETIME型と同じく、日付と時刻を格納するデータ型で、デフォルトフォーマットも「YYYY-MM-DD HH:MM:SS[…]」です。
では、何がDATETIME型と異なるのかというと、扱える日付の範囲が異なります。
TIMESTAMP型では「1970-01-01 00:00:01(UTC)」から「2038-01-19 03:14:07(UTC)」までの値が格納可能です。
日付の範囲以外にも、特殊な値を登録しようとした際の挙動の違いなどがありますので、興味のある方は別途調べてみてください。
今回はタイトルの趣旨から外れるため、DATETIME型とTIMESTAMP型の詳細な違いについての解説は行いません。
サンプル
日付型の指定方法は非常に簡単で、データ型の名前を定義するだけです。
ただ、DATETIME型やTIMESTAMP型などの小数点を扱えるデータ型では、0~6桁までで秒数以下の範囲を指定することが可能です(デフォルトは0)。
CREATE TABLE テーブル名(カラム名 DATE, カラム名 DATETIME(秒数以下の範囲));
「date_sample」というテーブル名で、1つ目のカラムをDATE型、2つ目のカラムをDATETIME型で秒数以下の範囲を2桁までとして作成する場合、下記のコマンドとなります。
CREATE TABLE date_sample(col1 DATE, col2 DATETIME(2));
さいごに:SQLのデータ型を全て覚える必要はない
本記事では、SQLのデータ型について、MySQLデータベースをサンプルとしてご紹介してきました。
今回掲載した内容は、利用可能なデータ型のごく一部に過ぎず、他にも様々なデータ型が用意されています。
全てを覚えておく必要はなく、頻繁に利用されるデータ型というのも限られています。
どういったデータ型があるのか概要を把握しておき、見慣れぬデータ型が使用されている場合には、調査しながら利用できるようにしましょう。
記事内ではMySQLで利用可能なデータ型を紹介します。
データベース毎に利用可能なデータ型は少しずつ異なりますので、ご注意ください。