C030 データ型(数値型・文字列型・日時型)

データベースのテーブルは列ごとに格納できる「データの種類」が決められています。そのデータの種類をあらわすものをデータ型と呼びます。今回はそのデータ型について紹介します。
このページでは、MySQLのデータ型を参考として説明していきます。

データ型の種類

下記、頻出データの4つの型となります。

数値型

数値型には大きく「整数型」「浮動小数点型」「固定小数点型」の3種類が存在します。個数やID、金額などのデータを格納する際に利用されるデータ型です。

整数型には、「TINYINT型」「SMALLINT型」「MEDIUMINT型」「INT型」「BIGINT型」といったデータ型が存在します。各データ型により扱える数値の範囲が異なります。

浮動小数点型には、「FLOAT型」「DOUBLE型」のデータ型が存在します。こちらもそれぞれ扱える数値の範囲が異なります。浮動小数点型は、計算で誤差が発生することを前提としたデータ型で、非常に大きな数まで対応することが可能となっています。FLOAT型では、小数第7位までが正確な値とされており、DOUBLE型では、小数第15位までが正確な値として設定されるようです。

固定小数点型には、「DECIMAL型」のデータ型が存在します。上述した浮動小数点型と異なり、誤差のないデータが格納出来るため、金額などのデータを格納する際に利用されます。ただし誤差が出ない分、扱えるデータの範囲が浮動小数点型よりも狭くなってしまいます。

文字列型

文字列型には大きく「CHAR型」と「VARCHAR型」の2種類が利用されます。人物や商品の名前・住所などを格納する際、利用されるデータ型です。

CHAR型は固定長で、決められたサイズのデータ領域を確保する型となります。カラムを作成する際に指定したサイズ以上のデータは格納出来ず、指定したサイズに足りない場合は、末尾が空白で埋められます。一方で、SELECT文を利用して取得する際には、空白は削除された状態でデータが表示されます。

VARCHAR型は可変長で、格納する文字列によって確保するデータ領域が適宜変更される型となります。CHAR型と同様、カラムを作成する際にサイズ指定を行う必要があり、指定サイズ以上の文字列は格納することが出来ません。VARCHAR型では、格納する文字列の末尾に空白が設定されている場合、SELECT文を利用して取得した際、そのまま空白を文字列の一部として扱います。

日時型

日付型・時刻型では「DATE型」「DATETIME型」「TIMESTAMP型」「TIME型」「YEAR型」のデータ型が利用されます。

DATE型は、日付(年月日)を格納するためのデータ型です。基本フォーマットは「YYYY-MM-DD」となっています。データを追加する際には、上記フォーマット以外にも「YY-MM-DD」や「YYYYMMDD」などのフォーマットにも対応しています。

DATETIME型は、日時(年月日時分秒)を格納するためのデータ型です。基本フォーマットは「YYYY-MM-DD HH:MM:SS」となっています。DATE型同様、データを追加する際は「YY-MM-DD HH:MM:SS」や「YYYYMMDDHHMMSS」などのフォーマットにも対応しています。

TIMESTAMP型は、日時(年月日時分秒)を格納するためのデータ型で、DATETIME型と基本のフォーマットは同じです。基本フォーマットは「YYYY-MM-DD HH:MM:SS」となっています。ただし、扱えるデータの範囲がDATETIME型よりも狭いことや、空文字や0など日付として相応しくない値を登録しようとした際のデータの取り扱い方が異なるため、ご利用の用途に適したデータ型を選択するようにしましょう。

TIME型は、時刻(時分秒)を格納するためのデータ型です。基本フォーマットは「HH:MM:SS」となっています。データを追加する際は「HH:MM」や「MMSS」と指定することで、「時分」のみや「分秒」のみを指定して登録することも可能です。

YEAR型は、年を格納するためのデータ型です。基本フォーマットは「YYYY」となっています。2桁での登録も可能で「1~69」を指定した場合「2001~2069」、「70~99」を指定した場合「1970~1999」に変換されます。なお、「0」を指定した場合は「0000」となるので注意してください。

論理型

論理型には「BOOLEAN型」と「BIT型」が利用されます。

論理型というと、多くの方がBOOLEAN型を思い浮かべるかと思いますが、MySQLの場合内部では「tinyint(1)」として扱われる特徴があります。つまりtinyint(1)でデータが格納可能な「-128~127」までのデータであれば格納出来てしまうことになります。ですので、BOOLEAN型はMySQLの場合、「TRUE」「FALSE」での判定に利用することは厳密には出来ません。

ではBOOLEAN型の代わりに、「TRUE」「FALSE」判定に使用するデータ型はどうするのかというと、「BIT型」が利用可能です。BIT型では「BIT(1)」と指定することで、「0」「1」の2つの値のみを取り扱うことが出来るようになります。もちろん「TRUE=1」「FALSE=0」で、条件指定でのデータ抽出も可能です。

エンジニアからのアドバイス

データベース毎にデータ型は異なり、全てを合わせるとかなりのデータ型が存在します。全てを覚える必要はなく、頻繁に利用するデータ型は一部ですので、様々なデータベース処理を経験しながら、徐々に理解を深めていきましょう。

---