SQLの学習を始めたばかりの方は、データベースの型についてまだまだ把握出来ていない部分も多いかと思います。
本記事では、頻繁に利用されるSQLのデータ型について、それぞれの概要をご確認頂けるようご紹介していきます。
目次
SQLのデータ型を理解しよう
SQLで利用可能なデータ型というのは、実はかなりの数が存在します。
データベース毎に名称が異なることもあり、全てを把握するのは難しいのが実情です。
しかし、頻繁に利用するデータ型というのはある程度決まっており、大きく4つのカテゴリに分けることが可能です。
- 文字列型
- 数値型
- 日付型・時刻型
- 論理値型
SQLのデータ型1: 文字列型
文字列型には大きく「CHAR型」と「VARCHAR型」の2種類が利用されます。
人物や商品の名前・住所などを格納する際、利用されるデータ型です。
CHAR型
CHAR型は固定長で、決められたサイズのデータ領域を確保する型となります。
カラムを作成する際に指定したサイズ以上のデータは格納出来ず、指定したサイズに足りない場合は、末尾が空白で埋められます。
一方で、SELECT文を利用して取得する際には、空白は削除された状態でデータが表示されます。
MySQLの場合には、文字数でサイズ指定を行います。
データベースによっては、バイト数となるため注意が必要です。
VARCHAR型
VARCHAR型は可変長で、格納する文字列によって確保するデータ領域が適宜変更される型となります。
CHAR型と同様、カラムを作成する際にサイズ指定を行う必要があり、指定サイズ以上の文字列は格納することが出来ません。
VARCHAR型では、格納する文字列の末尾に空白が設定されている場合、SELECT文を利用して取得した際、そのまま空白を文字列の一部として扱います。
全角空白を末尾に設定してデータを投入した場合には、CHAR型でも空白が保持されたままデータとして抽出されます。
SQLのデータ型2: 数値型
数値型には大きく「整数型」「浮動小数点型」「固定小数点型」の3種類が存在します。
個数やID、金額などのデータを格納する際に利用されるデータ型です。
整数型
整数型には、「TINYINT型」「SMAALINT型」「MEDIUMINT型」「INT型」「BIGINT型」といったデータ型が存在します。
各データ型により扱える数値の範囲が異なります。
- TINYINT: -128~127(符号付き) 0~255(符号なし)
- SMALLINT: -32768~32767(符号付き) 0~65535(符号なし)
- MIDIUMINT: -8388608~8388607(符号付き) 0~16777215(符号なし)
- INT: -2147483648~2147483647(符号付き) 0~4294967295(符号なし)
- BIGINT: -9223372036854775808~9223372036854775807(符号付き) 0~18446744073709551615(符号なし)
浮動小数点型
浮動小数点型には、「FLOAT型」「DOUBLE型」のデータ型が存在します。
こちらもそれぞれ扱える数値の範囲が異なります。
浮動小数点型は、計算で誤差が発生することを前提としたデータ型で、非常に大きな数まで対応することが可能となっています。
FLOAT型では、小数第7位までが正確な値とされており、DOUBLE型では、小数第15位までが正確な値として設定されるようです。
固定小数点型
固定小数点型には、「DECIMAL型」のデータ型が存在します。
上述した浮動小数点型と異なり、誤差のないデータが格納出来るため、金額などのデータを格納する際に利用されます。
ただし誤差が出ない分、扱えるデータの範囲が浮動小数点型よりも狭くなってしまいます。
SQLのデータ型3: 日付型・時刻型
日付型・時刻型では「DATE型」「DATETIME型」「TIMESTAMP型」「TIME型」「YEAR型」のデータ型が利用されます。
DATE型
DATE型は、日付(年月日)を格納するためのデータ型です。
基本フォーマットは「YYYY-MM-DD」となっています。
データを追加する際には、上記フォーマット以外にも「YY-MM-DD」や「YYYYMMDD」などのフォーマットにも対応しています。
DATETIME型
DATETIME型は、日時(年月日時分秒)を格納するためのデータ型です。
基本フォーマットは「YYYY-MM-DD HH:MM:SS」となっています。
DATE型同様、データを追加する際は「YY-MM-DD HH:MM:SS」や「YYYYMMDDHHMMSS」などのフォーマットにも対応しています。
TIMESTAMP型
TIMESTAMP型は、日時(年月日時分秒)を格納するためのデータ型で、DATETIME型と基本のフォーマットは同じです。
基本フォーマットは「YYYY-MM-DD HH:MM:SS」となっています。
ただし、扱えるデータの範囲がDATETIME型よりも狭いことや、空文字や0など日付として相応しくない値を登録しようとした際のデータの取り扱い方が異なるため、ご利用の用途に適したデータ型を選択するようにしましょう。
TIME型
TIME型は、時刻(時分秒)を格納するためのデータ型です。
基本フォーマットは「HH:MM:SS」となっています。
データを追加する際は「HH:MM」や「MMSS」と指定することで、「時分」のみや「分秒」のみを指定して登録することも可能です。
YEAR型
YEAR型は、年を格納するためのデータ型です。
基本フォーマットは「YYYY」となっています。
2桁での登録も可能で「1~69」を指定した場合「2001~2069」、「70~99」を指定した場合「1970~1999」に変換されます。
なお、「0」を指定した場合は「0000」となるので注意してください。
SQLのデータ型: 論理値型
最後に論理値型についても解説しておきます。
論理値型には「BOOLEAN型」と「BIT型」が利用されます。
BOOLEAN型について
論理型というと、多くの方がBOOLEAN型を思い浮かべるかと思いますが、MySQLの場合内部では「tinyint(1)」として扱われる特徴があります。
つまりtinyint(1)でデータが格納可能な「-128~127」までのデータであれば格納出来てしまうことになります。
ですので、BOOLEAN型はMySQLの場合、「TRUE」「FALSE」での判定に利用することは厳密には出来ません。
BIT型
ではBOOLEAN型の代わりに、「TRUE」「FALSE」判定に使用するデータ型はどうするのかというと、「BIT型」が利用可能です。
BIT型では「BIT(1)」と指定することで、「0」「1」の2つの値のみを取り扱うことが出来るようになります。
もちろん「TRUE=1」「FALSE=0」で、条件指定でのデータ抽出も可能です。
さいごに:SQLのデータ型でも頻繁に利用するのは一部
本記事では、SQLのデータ型について、MySQLをサンプルとして、データ型それぞれの基本情報をご紹介してきました。
データベース毎にデータ型は異なり、全てを合わせるとかなりのデータ型が存在します。
しかし、全てを覚える必要はなく、頻繁に利用するデータ型は一部ですので、様々なデータベース処理を経験しながら、徐々に理解を深めていきましょう。
今回はMySQLで利用可能なデータ型について解説していきます。