整數值都是完全一樣的。對於SIGNED
或UNSIGNED
,它們都在-128至127的範圍內。正如其他答案所指出的,括號中的數字僅僅是一個顯示寬度提示。
但是,您可能需要注意,應用程序=明智的事物可能看起來不同。在這裏,tinyint(1)
可以採取特殊的含義。例如,Connector/J(Java連接器)將tinyint(1)
視爲布爾值,而不是將數字結果返回給應用程序,而是將值轉換爲true
和false
。這可以通過連接參數tinyInt1isBit=false
進行更改。
由於數據類型是8位(1字節),tinyint(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/numeric-type-overview.html
MySql: Tinyint (2) vs tinyint(1) - what is the difference?
的可能重複的[MySQL的:?TINYINT(2)對TINYINT(1) - 哪些差(http://stackoverflow.com/questions/12839927/mysql-tinyint-2-vs-tinyint1-which -區別) – jmail