1. 程式人生 > >mysql 欄位長度限制

mysql 欄位長度限制

分析MySQL資料型別的長度

      MySQL有幾種資料型別可以限制類型的"長度",有CHAR(Length)、VARCHAR(Length)、TINYINT(Length)、SMALLINT(Length)、MEDIUMINT(Length)、INT(Length)、BIGINT(Length)、FLOAT(Length, Decimals)、DOUBLE(Length, Decimals)和DECIMAL(Length, Decimals)。

      然而,這些資料型別的長度,並不是都指資料的大小。具體說就是:
(1)CHAR、VARCAHR的長度是指字元的長度,例如CHAR[3]則只能放字串"123",如果插入資料"1234",則從高位擷取,變為"123"。 VARCAHR同理。

(2)TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT的長度,其實和資料的大小無關!Length指的是顯示寬度,舉個例子:

  1. mysql> create table test(id int(3) zerofill);  
  2. Query OK, 0 rows affected (0.09 sec)  
  3. mysql> insert into test(id) values(1),(1234);  
  4. Query OK, 2 rows affected (0.06 sec)  
  5. Records: 2  Duplicates: 0  Warnings: 0  
  6. mysql> select * from test;  
  7. +------+  
  8. | id   |  
  9. +------+  
  10. |  001 |  
  11. | 1234 |  
  12. +------+  
  13. 2 rows in set (0.00 sec)  
  

可以看出,id的顯示寬度為3,不足的左邊補0,資料長度超過的則原樣輸出。如果沒有zerofill,則看不出顯示寬度,沒有前導零。

(3)FLOAT、DOUBLE和DECIMAL的長度指的是全部數位(包括小數點後面的),例如DECIMAL(4,1)指的是全部位數為4,小數點後1位,如果插入1234,則查詢的資料是999.9。過程如下

  1. mysql> alter table test add realnum decimal(4,1);  
  2. Query OK, 2 rows affected (0.03 sec)  
  3. Records: 2  Duplicates: 0  Warnings: 0  
  4. mysql> insert into test(id,realnum) values(2,1234);  
  5. Query OK, 1 row affected, 1 warning (0.05 sec)  
  6. mysql> select * from test;  
  7. +------+---------+  
  8. | id   | realnum |  
  9. +------+---------+  
  10. |  001 |    NULL |  
  11. | 1234 |    NULL |  
  12. |  002 |   999.9 |  
  13. +------+---------+  
  14. 3 rows in set (0.02 sec)  

附錄 常見MySQL資料型別(留作備忘)

類 型

大 小

描 述

CAHR(Length)

Length位元組

定長欄位,長度為0~255個字元

VARCHAR(Length)

String長度+1位元組或String長度+2位元組

變長欄位,長度為0~65 535個字元

TINYTEXT

String長度+1位元組

字串,最大長度為255個字元

TEXT

String長度+2位元組

字串,最大長度為65 535個字元

MEDIUMINT

String長度+3位元組

字串,最大長度為16 777 215個字元

LONGTEXT

String長度+4位元組

字串,最大長度為4 294 967 295個字元

TINYINT(Length)

1位元組

範圍:-128~127,或者0~255(無符號)

SMALLINT(Length)

2位元組

範圍:-32 768~32 767,或者0~65 535(無符號)

MEDIUMINT(Length)

3位元組

範圍:-8 388 608~8 388 607,或者0~16 777 215(無符號)

INT(Length)

4位元組

範圍:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(無符號)

BIGINT(Length)

8位元組

範圍:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(無符號)

FLOAT(Length, Decimals)

4位元組

具有浮動小數點的較小的數

DOUBLE(Length, Decimals)

8位元組

具有浮動小數點的較大的數

DECIMAL(Length, Decimals)

Length+1位元組或Length+2位元組

儲存為字串的DOUBLE,允許固定的小數點

DATE

3位元組

採用YYYY-MM-DD格式

DATETIME

8位元組

採用YYYY-MM-DD HH:MM:SS格式

TIMESTAMP

4位元組

採用YYYYMMDDHHMMSS格式;可接受的範圍終止於2037年

TIME

3位元組

採用HH:MM:SS格式

ENUM

1或2位元組

Enumeration(列舉)的簡寫,這意味著每一列都可以具有多個可能的值之一

SET

1、2、3、4或8位元組

與ENUM一樣,只不過每一列都可以具有多個可能的值