UNSIGNEDを指定してテーブルの列を作成すると整数のみの扱いになる。

SQLは標準SQLの全ての数値データタイプをサポートします。これらのタイプは、
概数値データタイプ(FLOAT、REAL、DOUBLE PRECISION)だけでなく、
真数値データタイプ(INTEGER、SMALLINT、DECIMAL、 NUMERIC)を含みます。
キーワード INT は INTEGER のシノニムで、キーワード DEC は DECIMAL のシノニムです。

BIT データタイプはビットフィールド値を格納します。
これは、MyISAM、MEMORY、 InnoDB テーブルに対してサポートされています。
SQL標準への拡張として、MySQLは TINYINT、MEDIUMINT、 BIGINT などの
整数タイプもサポートします。次のテーブルには、各整数タイプが必要とする
容量と値の範囲が示されています。

unsigned

全ての整数タイプは、任意の(標準ではない) 拡張子である UNSIGNED を持つ事ができます。
正数だけをコラムの中で許可し、大きい上位数値範囲が必要な時には符号無しの値を利用できます。
例えば、INT カラムが UNSIGNED の時、カラム範囲のサイズは同じですが、
その終点は -2147483648 と 2147483647 から、0 と 4294967295 までシフトします。

mysql> CREATE TABLE T_unsigned(
-> id INT UNSIGNED,
-> comment varchar(20)
-> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO T_unsigned(id,comment) VALUE(1,”zerofill test”),(-2,”zerofill test”),(-3,”zerofill – test”);
Query OK, 3 rows affected, 2 warnings (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 2

mysql> SHOW WARNINGS;
+———+——+———————————————+
| Level | Code | Message |
+———+——+———————————————+
| Warning | 1264 | Out of range value for column ‘id’ at row 2 |
| Warning | 1264 | Out of range value for column ‘id’ at row 3 |
+———+——+———————————————+
2 rows in set (0.00 sec)

mysql> select * from T_unsigned;
+——+—————–+
| id | comment |
+——+—————–+
| 1 | zerofill test |
| 0 | zerofill test |
| 0 | zerofill – test |
+——+—————–+
3 rows in set (0.00 sec)

mysql>

unsigned2

数値コラムに対して ZEROFILL を指定すると、MySQLは自動的にそのカラムに
UNSIGNED 属性を追加します。

mysql> CREATE TABLE T_zerofill(
-> id INT ZEROFILL,
-> comment varchar(20)
-> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO T_zerofill(id,comment) VALUE(1,”zerofill test”),(2,”zerofill test”),(-3,”zerofill – test”);
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 1

mysql> SHOW WARNINGS;
+———+——+———————————————+
| Level | Code | Message |
+———+——+———————————————+
| Warning | 1264 | Out of range value for column ‘id’ at row 3 |
+———+——+———————————————+
1 row in set (0.00 sec)

mysql> select * from T_zerofill;
+————+—————–+
| id | comment |
+————+—————–+
| 0000000001 | zerofill test |
| 0000000002 | zerofill test |
| 0000000000 | zerofill – test |
+————+—————–+
3 rows in set (0.00 sec)

mysql>

zerofill


10.2. 数値タイプ


10.5. データタイプが必要とする記憶容量

Comments are closed.

Post Navigation