バナー画像

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

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

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

MySQLのデータ型とは?

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

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

MySQL データ型の大きな分類

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

MySQL データ型のメリット

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

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

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

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。