データベースでは扱う情報の一群をテーブルと表現しています。その構造は行と列からなっています。データ本体の行と列は、データの属性を担っています。列にはどのような種類のデータがどのような形式で格納されるのか、あらかじめ決められています。列のことをカラム、行のことをレコードとも言いますが、今回はカラムのデータ型について解説していきます。
RDB(リレーショナルデータベース)ではカラムの属性、つまりデータ型は事前に決定されています。MySQLのデータ型は「文字列」「数値」「日付・時間」「空間」など、いくつかの種類が用意されています。数値型には整数型、浮動小数点数型、固定小数点数型などがあります。いずれも格納できる値の範囲が決まっており、それ以上の数値を格納することはできません。
格納できる範囲に制限があるのは数値型だけでなく、制限があるデータ型が他にもあります。例えば文字列では、データの長さを文字単位で指定できます。また、文字列には文字セットや照合順序を属性として指定できます。むしろ適正な文字セットや照合順序の設定が大切ともいえるのです。
数値型には以下の型があります。
それぞれ固有の格納可能な長さ、小数点桁数があります。詳細は公式リファレンスマニュアルで確認してください。数値にはUNSIGNED、ZEROFILLという属性の設定があります。UNSIGNEDは符号なしになり、格納範囲も変わります。ZEROFILLはゼロ埋め入力が可能になります。
次に文字列型ですが、カラム定義での長さは文字単位で行っています。また、格納する長さを固定しているCHAR、同じCHARでも変動可能なVARCHARがあります。例えばCHARとVARCHARの長さを5に設定している場合、「test」というワードを入力すると、CHARでは「test」の末尾に空白が1文字分入ります。VARCHARではそのまま入り、余計な空白は入りません。そのため、CHARとVARCHARでは検索などで結果が変わってきますので、注意が必要です。
以下に文字列型を列記します。
BINARY、VARBINARY、BLOB、LONGBLOBは文字セットがありませんので、バイナリデータとしてデータがそのまま格納されます。BLOBは大きなデータを扱えますので、画像などもバイナリデータとして格納できます。
TINYTEXT 、TEXT、MEDIUMTEXT、LONGTEXTはカラム定義としては長さを指定しませんが、最大値は制限されています。それぞれ最大値が違うので注意が必要です。ENUMとSETは格納できる文字列を指定されたリストから選択できます。なお、ENUMは格納できる文字列は一つですが、SETは複数の文字列を格納できます。
日付と時間型は日時を扱うためのデータ型になります。以下が日付と時間型の一覧になります。
DATEは日付のみ、DATETIMEとTIMESTAMPは日付と時間のデータが格納できますDATETIMEとTIMESTAMPの違いが一見分かりづらいため解説しておきます。TIMESTAMPは1970年01月01日からの秒数を格納します。それ以前の日時は格納できません。DATETIMEは1000-01-01 00:00:00.000000~9999-12-31 23:59:59.999999の範囲が対象になります。TIMEは時間のみになります。YEARは年のみを対象とした型になり、2桁か4桁のデータになります。これも範囲の制限があり1901~2155、または70(1970)~69(2069)が格納できる範囲となります。日時はその日付や時間の記録だけでなく、期間の算定や特定の日時の設定など、さまざまなシーンで使われます。それぞれの用途に合わせてカラム定義を設定してください。
MySQLでは他の業務系RDB(リレーショナルデータベース)に劣らないほど、データ型の種類が用意されています。かつてのMySQL(5.6以前)ではデータ型の精度、つまりゆるさが指摘されていましたが、現在の系統に属する5.7以降ではかなり厳密なものになっています。それでも文字列と数値の型変換などを考慮してデータベースの設計、およびアプリケーションの作成を行うようにしてください。
また、今後もバージョンによって型の精度や属性の仕様が変わる可能性がありますので、利用しているバージョンに合った活用を意識してください。
ソフトエイジェンシー関連製品URL
製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。