2007年7月28日土曜日

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

mysql> create table t3 ( i integer unsigned);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t3 values(-1);
ERROR 1264 (22003): Out of range value adjusted for column 'i' at row 1
mysql>
mysql> describe t3;

+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| i | int(10) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+

1 row in set (0.01 sec)

Typeのところでint(10)となっているが、この10は10バイトという意味ではない。表示幅が10桁という意味です。

mysql> create table t ( i integer);
Query OK, 0 rows affected (0.07 sec)

mysql> describe t;

+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+

1 row in set (0.03 sec)

signedで作成した場合は、11桁になります。-2147483648でマイナス符号の分が考慮されています。


絶対にマイナスにならない値を保持するような場合には、
例えば年齢とか、なんかの点数など
UNSIGNEDにして、利用できる値を大きくする、もしくは利用する領域を減らす
ということに対応できます。

0 件のコメント: