2007年7月28日土曜日

データベース/フィールド/整数型

* MySQLもPostgreSQLも、多くのデータ型をもつ。
* どんなデータ型が存在するのか、どういう指定ができるかを整理しておく必要がある。
* 別名なども利用できるが、基本型が何で、別名がどれなのか。
* どれとどれが同意であるのかも把握しておく必要がある。


データ型 サイズ 最小値 最大値
TINYINT  1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807


基本型の別名が用意されている。


型名 データサイズ 備考
INT2 2 SMALLINTの別名
INT 4 INTEGERの別名
INT4 4 INTEGERの別名
INT8 8 BIGINTの別名


UNSIGNEDの場合 †

負の値が絶対に有り得ないフィールドの場合は、MySQLではUNSGINEDを検討してもよい。
その分、正の数の範囲が倍近く多くなる。

型名 データサイズ 最小値 最大値
TINYINT UNSIGNED 1 0 255
SMALLINT UNSIGNED 2 0 65535
MEDIUMINT UNSIGNED 3 0 16777215
INT UNSIGNED 4 0 4294967295
BIGINT UNSIGNED 8 0 18446744073709551615


TINYINTを例に、実際にテーブルを作り、インサートしてみる。

mysql> create table t2 (a tinyint);
Query OK, 0 rows affected (0.08 sec)

mysql> describe t2;

+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| a | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+

1 row in set (0.02 sec)

mysql> insert into t2 values(-129);
ERROR 1264 (22003): Out of range value adjusted for column 'a' at row 1
mysql> insert into t2 values(-128);
Query OK, 1 row affected (0.03 sec)

mysql> insert into t2 values(128);
ERROR 1264 (22003): Out of range value adjusted for column 'a' at row 1
mysql> insert into t2 values(127);
Query OK, 1 row affected (0.03 sec)

符号ありであれば、-128から127までの値はセット可能。
MySQL4.xの頃は、警告だけで登録はできていたはずだが、5.0からはエラーとなり登録できない。

0 件のコメント: