データベースのテーブル作成(型)
※以前別の場所で書いた文章を備忘的に書き記しておきます。
【投稿年月日】2007-01-15 【ジャンル】PHP/MySQL
データベースのテーブル作成にあたり、まず各フィールドの型を決定する必
要があります。私は以下のように分類して把握しています。
- 【数値型】整数 (tinyint、int等)
- 【数値型】浮動小数点 (float、decimal等)
- 【日付と時刻型】(datetime、date等)
- 【文字列型】A(char、varchar)
- 【文字列型】B(text、largetext等)
- 【文字列型】C(enum、set)
カラム型
dev.mysql.com/doc/mysql/ja/column-types.html
1【数値型】整数
一般的に整数の数値データを扱う場合は「int」を使いますが、データの大
きさによって使い分けることを考えた方がいいかもしれません。「int」は10
桁前後の数字を扱えるので、たいていはこれで足りると思います。さらに大き
な数字を扱う場合は「bigint」という型も用意されています。
なお「int(11)」のようにスクリプトを記述しますが、()内の数字は実際に
表示される最大の桁数を意味します。また[]内はオプションに「UNSIGNED」を
つけた場合の範囲となります。
「tinyint(4)」 1バイト
※範囲:-128~127 [0~255] ※Yes/No等の判断に適している
「smallint(6)」 2バイト
※範囲:-32,768~32,767 [0~65,535]
「mediumint(8)」 3バイト
※範囲:-8,388,608~8,388,607 [0~16,777,215]
「int(11)」 4バイト
※範囲:-2,147,483,648~2,147,483,647 [0~4,294,967,295]
数値型
dev.mysql.com/doc/mysql/ja/numeric-types.html
2【数値型】浮動小数点
一般的に小数点が必要となる場合には「float」を使います。あまり把握し
ていないのでうまく解説することができませんが、この型を使うと正確な値と
してデータが格納されないようです。厳密さを求める場合は文字列として格納
する「decimal」を使う方がいいようです。
「float(精度, 小数点以下の桁数)」 4バイト
※範囲:-3.402823466E+38~-1.175494351E-38、
0、1.175494351E-38~3.402823466E+38
「decimal(精度, 小数点以下の桁数)」 パック無し浮動小数
※範囲:-1.7976931348623157E+308~-2.2250738585072014E-308、
0、2.2250738585072014E-308~1.7976931348623157E+308
浮動小数点比較の問題
dev.mysql.com/doc/mysql/ja/problems-with-float....
3【日付と時刻型】
一般的に日付や時刻を格納する場合には「datetime」を使います。
「year(4)」 1バイト
※年 year(4)…'0000' ('YYYY')、year(2)…'00' ('YY')
「date」 3バイト
※日付 '0000-00-00' ('YYYY-MM-DD')
「time」 3バイト
※時間 '00:00:00' ('HH:MM:SS')
「timestamp(14)」 4バイト
※日付時間 timestamp(14)…'00000000000000' ('YYYYMMDDHHMMSS')
「datetime」 8バイト
※日付時間 '0000-00-00 00:00:00' ('YYYY-MM-DD HH:MM:SS')
日付と時刻型
dev.mysql.com/doc/mysql/ja/date-and-time-types....
【文字列型】A
一般的に文字数が決まっている場合(1~255バイト)には「varchar」を使
います。例えば60バイトならば「varchar(60)」となります。類似するものと
して「char」があります。
「char(文字数)」 文字数は1~255バイトで指定(固定長)
「varchar(文字数)」 文字数は1~255バイトで指定(可変長)
CHAR型とVARCHAR 型
dev.mysql.com/doc/mysql/ja/char.html
【文字列型】B
一般的に文字数が決まっていない場合には「text」を使います。もっと大き
なデータを扱いたい場合は「mediumtext」「largetext」が用意されています。
類似するものとして「blob」があります。
「tinytext」 1~255バイト
「text」 1~65,535バイト
「mediumtext」 1~1,677,215バイト
「largetext」 1~4,294,967,295バイト
BLOB型とTEXT型
dev.mysql.com/doc/mysql/ja/blob.html
【文字列型】C
リスト形式でデータを扱いたい場合は「enum」や「set」を使います。文字
列を値とする配列と考えればいいようです。馴染みのない型ですが、使い方に
よってはとても便利なようです。
例えば、曜日をリスト出力するには次のように記述します。
//テーブル作成 (※テーブル名…youbi)
//(※フィールド名…[youbi1],[youbi2])
mysql_query("CREATE TABLE IF NOT EXISTS youbi (
youbi1 enum('月', '火', '水', '木', '金', '土', '日'),
youbi2 set('月', '火', '水', '木', '金', '土', '日')
)");
//データ作成(※テーブル名…youbi)
mysql_query('INSERT INTO youbi values(1, 1)');
mysql_query('INSERT INTO youbi values(3, 2)');
mysql_query('INSERT INTO youbi values(6, 3)');
mysql_query('INSERT INTO youbi values(9, 4)');
mysql_query('INSERT INTO youbi values(4, 5)');
//(※フィールド名…[youbi1],[youbi2])
mysql_query("CREATE TABLE IF NOT EXISTS youbi (
youbi1 enum('月', '火', '水', '木', '金', '土', '日'),
youbi2 set('月', '火', '水', '木', '金', '土', '日')
)");
//データ作成(※テーブル名…youbi)
mysql_query('INSERT INTO youbi values(1, 1)');
mysql_query('INSERT INTO youbi values(3, 2)');
mysql_query('INSERT INTO youbi values(6, 3)');
mysql_query('INSERT INTO youbi values(9, 4)');
mysql_query('INSERT INTO youbi values(4, 5)');
phpMyAdminで「youbi」テーブルを確認すると以下のようなデータが作成さ
れているはずです。
[youbi1] |
[youbi2] |
月 |
月 |
水 |
火 |
土 |
月,火 |
|
水 |
木 |
月,水 |
すなわち「enum」は以下のように変換されて格納。
[入力データ] |
[格納データ] |
1 |
月 |
3 |
水 |
6 |
土 |
9 |
(※該当するものなし) |
4 |
木 |
すなわち「set」は以下のように変換されて格納。
[入力データ] |
[格納データ] |
1 |
月 |
2 |
火 |
3 |
月,火 |
4 |
水 |
5 |
月,水 |
「enum」は順番通りに変換されているので分かりやすいですが、「set」は
分かりづらいと思われます。より詳しくは下記ページをご覧ください。
「enum('value1','value2',...)」
※最大65,535個の要素。
dev.mysql.com/doc/mysql/ja/enum.html
「set('value1','value2',...)」
※最大64個の要素。
dev.mysql.com/doc/mysql/ja/set.html
その他、参考にしたページは以下の通りです。
各カラム型に必要な記憶容量
dev.mysql.com/doc/mysql/ja/storage-requirements...
データ型の概要
www.rfs.jp/sitebuilder/sql/02/03.html
全データ型の一覧
www.rfs.jp/sitebuilder/sql/02/02_table.html
EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript