2016-05-14 140 views
0

這是我的專欄 enter image description here小整數類型長度

,因爲它的長度規定(SMALLINT(4)),但它並不限制值 的範圍內,所以我怎麼能限制,只有4位值可以在此列

+0

你可以做的是在應用程序代碼,或者您的查詢 – Strawberry

+0

這應該做的伎倆。結果與預期結果有何不同? – Mureinik

+0

@Mureinik括號中的數字與數據類型將接受的值範圍沒有關係。 – Strawberry

回答

1

「在查詢」驗證是可以做到這樣的:

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table (year INT NOT NULL); 

INSERT INTO my_table SELECT 2016 FROM (SELECT 1) n WHERE 2016 BETWEEN 0 AND 9999; 
Query OK, 1 row affected (0.00 sec) 

SELECT * FROM my_table; 
+------+ 
| year | 
+------+ 
| 2016 | 
+------+ 

INSERT INTO my_table SELECT 20161 FROM (SELECT 1) n WHERE 20161 BETWEEN 0 AND 9999; 
Query OK, 0 rows affected (0.00 sec) 

SELECT * FROM my_table; 
+------+ 
| year | 
+------+ 
| 2016 | 
+------+ 
0

輸入從MySQL manual

MySQL支持用於選擇指定的整數數據類型的顯示寬度括號中的類型base關鍵字以下的延伸部。例如,INT(4)指定一個顯示寬度爲四位的INT。

顯示寬度確實是不是約束可存儲在列中的值的範圍。它也不會阻止比列顯示寬度更寬的值被正確顯示。例如,指定爲SMALLINT(3)的列的常用SMALLINT範圍爲-32768至32767,並且三位數所允許的範圍之外的值全部使用三位以上的數字顯示。

因此,您不能僅限制mysql中的4位數值。而MySQL不支持自定義的CHECK約束。但是你可以創建像this這樣的觸發器並檢查裏面的值。請注意,自MySQL 5.5以來,SIGNAL起作用。

+0

我認爲OP已經知道這一點。 – Strawberry