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 件のコメント:
コメントを投稿