MySQL整数型の括弧内の(1)は、データ型によって受け入れられる値の範囲、またはデータ型の格納方法とは関係ありません。表示専用です。
タイプのMySQL:BigInt(20)とInt(20)など 。
TINYINTは、TINYINT(1)、TINYINT(2)、またはTINYINT(64)と同じです。これは8ビットの符号付き整数データ型であり、-128から127までの任意の8ビット整数値を受け入れます。
mysql> create table b (i tinyint(1));
mysql> insert into b values (42);
mysql> select * from b;
+------+
| i |
+------+
| 42 |
+------+
便宜上、MySQLはBOOLのエイリアスをサポートしており、すぐにTINYINT(1)に置き換えられます。
mysql> create table b2 (i bool);
mysql> show create table b2;
CREATE TABLE `b2` (
`i` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
私が言ったように、(1)の使用はほとんど意味がありません。これは単なる慣例であるため、TINYINT(1)が表示された場合、その列が意図されていると見なすのが妥当です。 ブール値として使用されます。ただし、MySQLには、他の整数値を格納することを妨げるものはありません。
列がのみを受け入れるようにする場合 0または1、BIT(1)を使用できます:
mysql> create table b3 (i bit(1));
mysql> insert into b3 values (0), (1);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into b3 values (-1);
ERROR 1406 (22001): Data too long for column 'i' at row 1
mysql> insert into b3 values (2);
ERROR 1406 (22001): Data too long for column 'i' at row 1
ただし、特定の列のストレージは最も近いバイトに切り上げられるため、TINYINTと比較してスペースを節約することはできません。
PS:@ samdy1からの回答にもかかわらず、TINYINTは文字列を保存しません '0'
または'1'
まったく、整数を格納します 0
または1
、および-128から127までの他の整数。SQLで整数を引用する必要はありません。なぜこれほど多くの開発者が引用するのか、私はしばしば戸惑います。