このページについて
このページではMySQLで扱うことのできるデータ型についての紹介と解説をしています。それぞれ適したデータ型を設定しましょう。
データ型について
MySQLでは扱うことのできるデータ型がかなり多くあります。全てを使う場面はそう多くはないと思いますが、少なくとも基本的なものは必ず使い分ける必要があるのでそこをまず把握しましょう。
プログラミングにおいてもそうですが、数字とそれ以外では扱い方が違います。MySQLでも同じで、数字は基本的にはINT型として扱います。逆にそれ以外の文字(アルファベット・ひらがな・漢字等)はvarchar型に代表される文字列型として扱います。それぞれ逆にした場合は正常に保存ができずエラーとなります。
数字の型
数字は以下の型があります。
- 整数型
- 小数点を含まない、整数のみ扱える型です。
- INTEGER
- 最小値は-2147483648で、最大値は2147483647。符号なしの場合は最小値は0で、最大値が4294967295。よくintとして略されます。そして使用頻度が多いのもこれだと思います。
- TINYINT
- 最小値(符号なし)は0、最大値(符号なし)は255。最小値(符号あり)は-128、最大値(符号あり)は127。
- SMALLINT
- 最小値(符号なし)は0、最大値(符号なし)は32767。最小値(符号あり)は-32768、最大値(符号あり)は32767。
- MEDIUMINT
- 最小値(符号なし)は0、最大値(符号なし)は16777215。最小値(符号あり)は-8388608、最大値(符号あり)は8388607。
- BIGINT
- 最小値(符号なし)は0、最大値(符号なし)は18446744073709551615。最小値(符号あり)は-9223372036854775808、最大値(符号あり)は9223372036854775807。
- 固定小数点型
- 小数点を扱うことができる型です。そして金銭データなどを扱うときに使われる型です。
- DECIMAL
- NUMERICも同じ機能を有しているので、一緒に解説します。これらの型はカラムに付与するときに桁数とスケールを宣言します。例えばdecimal(5,2)と宣言した場合、「カラムに入れることができるのは5桁で、小数点以下は2桁までOK」という意味になります。この場合は100.22や1.1111などは正常に挿入することができます。
- 浮動小数点型
- 上記の固定小数点型とは違い、今度は小数点以下が何桁になってもOKの型です。オプションにて最大桁数を設定した場合のみ、自動でその桁数に収まるように丸める機能があります。この型はEという表記が出てくるのでそれについて簡単に解説します。これは「指数表記」というものです。これは10.3497と12094.2974を比較するときに簡単に比較できるように整えようってことで、二つとも1.03497と1.20942974にします。その後、それぞれ10を何乗すれば元の数値になるかを表記します。その書き方のルールを定めたのが指数表記と呼ばれるものです。最初の例だと1.03497*10の-1乗となります。(1.03497e-1)
- FLOAT
- 「単精度浮動小数、有効範囲は-3.402823466E+38から-1.175494351E、0、1.175494351E-38から3.4028223466E+38」というわけで、とにかく沢山の桁数が保存できることがわかります。
- DOUBLE
- 「倍精度浮動小数、有効範囲は-1.7976931348623157E+308から-2.2250738585072014E-308、0、2.2250738585072014E-308から1.7976931348623157E+308」ということで、こちらもかなりの桁数を保存できます。倍精度浮動小数というのは指数部が8ビットや11ビットのような違いもあるんですが、簡単にいえば扱える桁数が違うって認識で構いません。詳しく知りたい方はお調べください。
- ビット値
- ビット値を格納するときに使用します。ビット値は0と1で書かれたバイナリ値です。ビット値はb’数字’という表記をします。ビット値リテラルと呼ばれる書き方になります。b’01’やB’02’、0b01のような書き方が使えます。
日時データ型
日にちや時間を表すものは日時データ型に格納します。Yは年、Mは月、Dは日、hは時、mは分、sは秒を意味します。
- DATE
- 日付部分のみ含み、時間は含まない型。’YYYY-MM-DD’のように取得・表示します。
- DATETIME
- 日付と時間を含む型です。’YYYY-MM-DD hh:mm:ss’のように取得・表示します。1000-01-01 00:00:00から9999-12-31 23:59:59までの範囲をサポートしています。
- TIMESTAMP
- 日付と時間を含む型です。取得や表示に関してはDATETIMEと同じですが、サポート範囲は1970-01-01 00:00:01 UTCから2038-01-19 03:14:07 UTCの範囲です。UTCは協定世界時と呼ばれるものです。日本だとJSTという表記になり、UTCより9時間進めた時間を標準時刻としています。
- TIME
- 日時は保存せず、時間のみ含む型です。’hh:mm:ss’のように取得・表示します。TIMEの範囲は-838:59:59から838:59:59です。
- YEAR
- 年の値を表すために使用される型です。1901から2155の値がYYYYの形式で取得・表示されます。
文字列型
次は最も使用頻度が多いかもしれない、文字列を格納することができる文字列型について。これらはカラムへの型宣言時にCHAR(30)のように数字を入力します。これは「そのカラムに保存できる文字列の最大数」を表しています。なのでこの場合は「CHAR型でカラムに保存できる文字列は最大30文字まで」ということになります。
設定した数値よりも多い文字列を保存しようとすると超過した分は切り捨てられ、警告メッセージが出ます。
- CHAR
- 0から255までの値を設定できます。
- VARCHAR
- 0から65,535までの値を設定できます。
- BINARY
- バイナリ値を格納できる型。類似のVARBINARYという型もあり、一緒に解説します。これらはCHARなどと同じく数値による格納制限をすることができますが、文字数ではなくバイト数による制限となります。
- BLOB
- さまざまな容量のデータを保持できる大きなバイナリオブジェクト。細かく分けるとTINYBLOB,BLOB,MEDIUMBLOB,LONGBLOBの4種類あり、それぞれの違いは保存できる値の最大長です。
- TEXT
- さまざまな容量のデータを保存できるテキスト型で、これもTINYTEXT,TEXT,MEDIUMTEXT,LONGTEXTの4種類があります。WordPressの記事本文は大抵LONGTEXTとして保存されています。
- ENUM
- テーブル作成時に明示的に列挙されたリストから選択された値を持つ文字列オブジェクトという初見には意味不明な型ですが、簡単にいえば「あらかじめ作ったリストの各文字列に数字を振り、選択時にそれらの数字を保存することで文字列を保存しているのと同じ状態を作る」というものです。
- SET
- ENUMは単一の値だけを持つ事ができましたがSETは複数の値を持つ事ができます。
JSON型
みんな大好きJSONも型が用意されています。これを使用すると保存されているJSONドキュメントの自動検証が行われて無効な場合はエラーが出るのでわかりやすかったり、記憶域が最適化されているようでかなり早い読み取りが可能だとか。カラムに対して設定出来る型はJSONの1つだけなので、その点でもわかりやすいですね。
まとめ
MySQLには簡単に紹介しただけでもこれだけの型があります。それぞれ数字なら数字を扱える型、文字列なら文字列を扱える型に保存するのが確実です。それぞれ適した型を使い、データベースを構築・運用しましょう。
- MySQLの用語集
- MySQLでよく使う・よく見る用語集です。知っておくと検索とかも便利になります。
- ローカル環境の整え方
- MAMPを使ってローカル環境を整える方法を紹介。
- MySQLデータベースに接続する方法
- MAMPのデータベースと、レンタルサーバーのデータベースに接続する方法
- MySQLの基本コマンド
- MySQLへ接続してまず使う基本コマンドの一覧です。
- データベースの作成
- ターミナル・phpMyAdminでのデータベースの作成方法をそれぞれ解説。
- テーブルの作成
- ターミナル・phpMyAdminのそれぞれでテーブルを作成する方法と、作成と同時にPRIMARYやUNIQUEの付与などの方法を紹介。
- キーの種類と機能
- カラムに設定出来るキーの種類と機能を解説。
- 正規化
- リレーショナルデータベースを使う上で必須となる正規化について。データの追加や更新などで手間を省く方法としても使えます。
- ALTER TABLE
- ALTER TABLE構文を使って作成済みのテーブルに対して操作を行う。PRIMARYの付与やカラムの移動・名前変更・追加・削除なども行えます。
- INSERT構文
- INSERT構文を使って指定テーブルにデータ(行)を挿入する方法の解説です。
- UPDATE構文
- UPDATE構文を使って指定テーブルのカラムを一括更新、もしくは指定レコードの指定カラムのみを更新する方法の解説です。
- SELECT構文
- SELECT構文を使って指定したテーブルからデータを取得する方法の解説です。
- JOIN
- JOINを使ってテーブル同士を結合する方法の解説です。