2014-04-16 92 views
1

我不明白爲什麼這個選項。 簽名的TINYINT數據類型可以存儲在-128和127的數據的角度來看,tinyint(1)tinyint(2)tinyint(3)等之間什麼是TINYINT(參數)的含義?

mysql> create table b (i tinyint(1)); 

mysql> insert into b values (42); 

mysql> select * from b; 
+------+ 
| i | 
+------+ 
| 42 | 
+------+ 
+0

的可能重複的[MySQL的:?TINYINT(2)對TINYINT(1) - 哪些差(http://stackoverflow.com/questions/12839927/mysql-tinyint-2-vs-tinyint1-which -區別) – jmail

回答

2

整數值都是完全一樣的。對於SIGNEDUNSIGNED,它們都在-128至127的範圍內。正如其他答案所指出的,括號中的數字僅僅是一個顯示寬度提示。

但是,您可能需要注意,應用程序=明智的事物可能看起來不同。在這裏,tinyint(1)可以採取特殊的含義。例如,Connector/J(Java連接器)將tinyint(1)視爲布爾值,而不是將數字結果返回給應用程序,而是將值轉換爲truefalse。這可以通過連接參數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?

1

數值數據類型的lenght參數僅影響顯示WID而不是可以存儲的價值。

TINYINT -128 to 127 (or 0-255 unsigned) 
SMALLINT -32768 to 32767 (or 0-65535 unsigned) 
MEDIUMINT -8388608 to 8388607 (or 0-16777215 unsigned) 
INT  -2147483648 to 2147483647 (or 0-4294967295 unsigned) 
BIGINT -9223372036854775808 to 9223372036854775807 (or 0-18446744073709551615 unsigned) 
相關問題