MySQL創建表時,數據類型後面的()是個啥?

數據類型後面的()

對於數值後面的(),在不同的數據類型中,有着不同的意義。起初我以爲只是一個範圍,後來發現,事情不是想象中的那麼簡單。在有些數據類型中,的確是如此,而對於有些數據類型,那就不是這麼回事了。

字符串類型

字符串類型後面()是限制插入字符串個數,常用的字符串類型就是varchar()和char()。

mysql> create table test7(one varchar(1),two char(1));

這樣就把插入記錄的字符串限制在了一位,超過就會報錯

mysql> insert into test7 values('測試','測試');
ERROR 1406 (22001): Data too long for column 'one' at row 1

只有符合條件,纔會把記錄添加到表中

mysql> insert into test7 values('測','試');
Query OK, 1 row affected (0.01 sec)

在表中查看

mysql> select * from test7;
+------+------+
| one  | two  |
+------+------+
|||
+------+------+

數值類型

對於int()和tinyint()這兩個證數類型,應該都熟悉,在創建表的時候經常會用到,以爲數值類型()是最大顯示字符寬度嗎?我們用一個實例來說明一下。

mysql> create table test(id int(1),id2 int(4) unsigned zerofill,age tinyint(1),age2 tinyint(3) unsigned zerofill);

創建一對int()和tinyint(),用於更明顯的比較。int(4) unsigned zerofill和age2 tinyint(3) unsigned zerofill的意思爲無符號,用0來填充位數。

添加一條記錄

mysql> insert into test values(100,100,23,23);

類型對應的數值相同,同樣也是爲了比較明顯。

查詢結果

mysql> select * from  test;
+------+------+------+------+
| id   | id2  | age  | age2 |
+------+------+------+------+
|  100 | 0100 |   23 |  023 |
+------+------+------+------+

首先要知道,數值類型()的確是字符範圍,不過是最小顯示範圍,大於範圍不會進行任何操作,若是小於範圍,則會在左側添加空格,直到符合最小範圍的要求。

在這個小測試中,我將填充符號空格改爲0,這樣就可以明顯地看到,若是不滿足最小範圍的要求,就會使用填充符填充。

再向其中添加一條相同數值的記錄

mysql> insert into test values(1,1,1,1);

查看結果

mysql> select * from  test;
+------+------+------+------+
| id   | id2  | age  | age2 |
+------+------+------+------+
|  100 | 0100 |   23 |  023 |
|    1 | 0001 |    1 |  001 |
+------+------+------+------+

和之前一樣,對於滿足最小範圍要求的數值,不做任何更改,不滿足最小範圍要求的數值,使用填充符填充。

對於每個數值類型,都有默認的最小範圍,所以說,此項可以省略。要注意,()中的數值並不會影響數據類型的大小,數值類型的大小是固定的。int類型就是4字節,tinyint類型就是1字節,其使用範圍也不會因()中的數值而改變,就算數值類型tinyint(1111),其在插入記錄的時候,最大插入數也只是127。

浮點類型

浮點類型和數值類型就不一樣了,這個的的確確是範圍,不過是包含小數的範圍。
浮點類型有兩種範圍的使用方法:

如果直接使用浮點類型(n),其作用和在數值中是一樣的。
而使用浮點類型(n,m),則n就是最大字符(整數大於n就會報錯),m爲最小浮點數值。

對於浮點數,使用最頻繁的就是float()了,以下測試通過float()類型測試。’

第一種:

mysql> create table test4(one float(2),two float(4));
mysql> insert into test4 values(1,2.2);
mysql> select * from test4;
+------+------+
| one  | two  |
+------+------+
|    1 |  2.2 |
+------+------+

對於這種情況,float()中填寫的都是最小顯示範圍,不夠的部分使用空格作爲填充符,添加在左側。

第二種:

mysql> create table test5(one float(2,1),two float(5,2));
mysql> insert into test5 values(99.9,99.999);
ERROR 1264 (22003): Out of range value for column 'one' at row 1

使用float(n,m)範圍時,需要按照其範圍添加記錄,否則就會報錯。這裏顯示one字段報錯,因爲添加字段範圍大於最大數字範圍。

mysql> insert into test5 values(1.1,2.22);
mysql> select * from test5;
+------+------+
| one  | two  |
+------+------+
|  1.1 | 2.22 |
+------+------+

這樣就添加成功了。

對於浮點數範圍,多餘的數將會四捨五入,就像是float(2,1),整數最大爲2位,小數最大爲1位,多餘將會四捨五入。

mysql> insert into test5 values(9.89,99.899);
mysql> select * from test5;
+------+-------+
| one  | two   |
+------+-------+
|  9.9 | 99.90 |
|  1.1 |  2.22 |
+------+-------+

時間/日期類型

這個類型就很簡單了,通常不加範圍,其就是代表了一個時間。

常用的時間/日期類型就是date()和time()了。

mysql> create table test6(one date,two time);
mysql> insert into test6 values('2020/4/21','12:00:00');
mysql> select * from test6;
+------------+----------+
| one        | two      |
+------------+----------+
| 2020-04-21 | 12:00:00 |
+------------+----------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章