【入門編】MySQLで使えるデータ型は?主要な型を徹底解説!
  • facebookページ
  • twitterページ
  • 2020.01.30

    【入門編】MySQLで使えるデータ型は?主要な型を徹底解説!

    MySQLを使用しているとよく耳にするデータ型。このデータ型について、しっかりと理解しているでしょうか?あまり理解していないということであれば、MySQLを使ってデータベースの運用を行う上で、思わぬところでエラーが発生したり、うまくデータが保存されなかったりする可能性があります。ただ、MySQLのデータ型には複数の種類があるため、最初のうちはデータ型をややこしく感じてしまうかもしれません。

    そこで本コラムでは、MySQLのデータ型について、できるだけ丁寧かつ分かりやすく解説をしていきます。

    本記事の要点
    • MySQL データ型の概要
    • MySQL データ型の種類

    MySQLのデータ型とは?

    これまでMySQLのデータ型についてあまり意識をしたことがないという方に向けて、簡単にデータ型を理解できるように説明をしていきます。

    まず前提として、MySQLではデータベース上にテーブルを作成する際、各カラムに対して、登録するデータの種類(型)を指定することが推奨されています。たとえば、数字のデータであれば数値型、文字のデータなら文字列型といったように分類されるのです。

    MySQL データ型の大きな分類

    • 数値型
    • 日付と時間型
    • 文字列型
    • 空間型

    MySQL データ型のメリット

    では、なぜMySQLではデータベース上にテーブルを作成する際、各カラムに対して、登録するデータの型を指定することが推奨されているのでしょうか。一言で言うとストレージを最適化するためです。後ほどデータ型の各種類について詳しく述べますが、以下に簡単な一例を挙げましょう。

    たとえば、テーブルに1から60,000までの整数をランダムで登録するテーブルカラムがあるとしましょう。それに対して、適切なデータ型は以下のどれでしょうか。

    • 「0〜255」の範囲の数値を登録できるTINYINT UNSIGNED
    • 「0〜65,535」の範囲の数値を登録できるSMALLINT UNSIGNED
    • 「0〜1,677,7215」の範囲の数値を登録できるMEDIUMINT UNSIGNED
    • 「0〜4,294,967,295」の範囲の数値を登録できるINT UNSIGNED
    • 「0〜18,446,744,073,709,551,615」の範囲の数値を登録できるBIGINT UNSIGNED

    上記5種類は、数値型をさらに細分化したデータ型の名称です。「1〜60,000」の数値であれば、TINYINT型以外のデータ型で対応できそうです。しかし、あえて無駄のない1つのデータ型を選ぶとすればSMALLINT UNSIGNED型ですね。

    ほかの数値型となると、登録される数値に対してあまりにも対応範囲が広すぎるのです。必要以上に大きなデータ型を選択してしまうと、使用するストレージの容量が多くなり過ぎてしまいます。そのため、データ型を選択する際には、常に最適なものを選ぶことが推奨されています。

    ポテパンダの一言メモ

    UNSIGNED」というキーワードについても触れておきましょう。これは「記号なし」という意味です。たとえば負の数を表す「-(マイナス)」などは記号となります。「UNSIGNED」を数値型に指定すると、このような記号をつけることができない代わりに、数値の範囲を広めることができます。

    たとえば「TINYINT UNSIGNED」は範囲が「0〜255」ですが、「TINYINT」は範囲が「-128〜127」となります。「UNSIGNED」をつけるかどうかは、テーブルカラムに登録されるデータに基づいて決めましょう。

    MySQL データ型の種類

    それでは早速、MySQL データ型の種類について詳しく見ていくことにしましょう。

    数値型

    まずは先ほども例で触れた数値型について述べましょう。数値数値型からは、以下のものを紹介しましょう。

    • 整数型
    • 固定小数点型

    整数型

    整数型はその名前のとおり、SQL標準整数型に対応しています。以下がその一覧と範囲です。

    整数型
    • TINYINT(UNSIGNED)→ -128〜127(0〜255)
    • SMALLINT(UNSIGNED)→ -32768 32767(0〜65535)
    • MEDIUMINT(UNSIGNED)→ -8388608〜8388607(0 〜16777215)
    • INT(UNSIGNED)→ -2147483648〜2147483647(0〜4294967295)
    • BIGINT(UNSIGNED)→ -9223372036854775808〜9223372036854775807(0〜18446744073709551615)

    固定小数点型

    固定小数点型は、小数点の入る数値に対応しているデータ型です。以下がその一覧と範囲です。

    固定小数点型
    • DECIMAL→ -999.99〜999.99
    • NUMERIC→ -999.99〜999.99

    データ型は2つありますが、MySQLの場合、NUMERICはDECIMALとして扱われます。そのため、固定小数点型を扱う際にはDECIMAL型を使いましょう。

    日付と時間型

    次に日付と時間型について述べましょう。日付と時間型には以下のものがあります。

    • DATE型 /DATETIME型 / TIMESTAMP型
    • TIME型
    • YEAR型

    こちらでは「DATE型 /DATETIME型 / TIMESTAMP型」についてまとめてご紹介をしていきましょう。

    DATE型 /DATETIME型 / TIMESTAMP型

    DATE型・DATETIME型・TIMESTAMP型はそれぞれ異なる型ですが、それぞれが関連し合っているため、まとめて見ていきましょう。

    DATE型 /DATETIME型 / TIMESTAMP型
    • DATE型→ 「YYYY-MM-DD」の形式でデータを取得・表示
    • DATETIME型→ 「YYYY-MM-DD HH:MM:SS」の形式でデータを取得・表示
    • TIMESTAMP型→ DAYETIME型の形式で日付データを取得・表示

    DATE型とDATETIME型の違いは、時刻をデータに含めるかどうかの違いです。また、TIMESTAMP型は現在時刻などを取得するのに使用されることが多く、たとえばテーブルカラムのレコードに新しいデータを保管した日時を保存するときなどに用いられます。

    ちなみにDATE型で取得・表示できる日時は「1000-01-01〜9999-12-31」の範囲、DATETIME型で取得・表示できる日時は「1000-01-01 00:00:00〜9999-12-31 23:59:59」の範囲であるということも覚えておきましょう。

    文字列型

    次に文字列型について述べましょう。文字列型には以下のものがあります。

    • CHAR型 / VARCHAR型
    • BINARY型 / VARBINARY型
    • BLOB型 / TEXT型
    • ENUM型
    • SET型

    こちらでは「CHAR型 / VARCHAR型」についてまとめてご紹介をしていきましょう。

    CHAR型 / VARCHAR型

    CHAR型とVARCHAR型は似ていますが、以下のような違いがあります。

    CHAR型
    • サポートしている文字数は「0〜255」文字
    • 「固定長文字列」なので指定した文字数分だけ容量が確保される
    VARCHAR型
    • サポートしている文字数は「0〜65,535」文字
    • 「可変長文字列」なのでデータの分だけの容量が確保される

    2つのデータ型のポイントは固定長文字列と可変長文字列です。CHAR型の場合にはたとえば「50文字」分の字数を指定しておくと実際に入った文字が5文字であっても残り45文字分の容量を使用することとなります。一方VARCHARの場合には、実際に入った文字数分だけの容量が確保されることとなります。

    まとめ

    本コラムではMySQLのデータ型について、できるだけ丁寧かつ分かりやすく解説をしていきました。これまでデータ型についてあまり深く考えていなかったという方は、今回のコラムをきっかけに、適切なデータ型指定ができるようになったことかと思います。ぜひ、正しいデータ型を指定し、ストレージの最適化を常に意識していきましょう。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE