データに関しては、tinyint(1)
、tinyint(2)
、tinyint(3)
などはすべてまったく同じです。 SIGNED
の場合、これらはすべて-128〜127の範囲です。 またはUNSIGNED
の場合は0-255 。他の回答が指摘しているように、括弧内の数字は単なる表示幅のヒントです。
ただし、application=wiseのものは異なって見える場合があることに注意してください。ここでは、tinyint(1)
特別な意味を持つことができます。たとえば、Connector / J(Javaコネクタ)はtinyint(1)
を扱います ブール値として、数値結果をアプリケーションに返す代わりに、値をtrue
に変換します およびfalse
。これは、tinyInt1isBit=false
を介して変更できます 接続パラメータ。
tinyint(1)は、データ型が8ビット(1バイト)であるため、-128〜127の範囲の数値を保持できます。明らかに、符号なしtinyintは0〜255の値を保持できます。
範囲外の値をサイレントに切り捨てます:
mysql> create table a
-> (
-> ttt tinyint(1)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from a;
+------+
| ttt |
+------+
| 127 |
| -128 |
| 127 |
| -128 |
+------+
4 rows in set (0.00 sec)
mysql>
... sql_mode
を変更しない限り またはサーバー構成を変更します:
mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>
データ型のDDLで使用される値(例:tinyint(1))は、ご想像のとおり、表示幅です。ただし、これはオプションであり、クライアントはこれを使用する必要はありません。たとえば、標準のMySQLクライアントはそれを使用しません。
https://dev.mysql .com / doc / refman / 5.1 / en / integer-types.html
https:// dev .mysql.com / doc / refman / 5.0 / en / neuro-type-overview.html
MySQL:Tinyint(2 )vs tinyint(1)-違いは何ですか?