* どんなデータ型が存在するのか、どういう指定ができるかを整理しておく必要がある。
* 別名なども利用できるが、基本型が何で、別名がどれなのか。
* どれとどれが同意であるのかも把握しておく必要がある。
データ型 サイズ 最小値 最大値
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 件のコメント:
コメントを投稿