數據類型後面的()
對於數值後面的(),在不同的數據類型中,有着不同的意義。起初我以爲只是一個範圍,後來發現,事情不是想象中的那麼簡單。在有些數據類型中,的確是如此,而對於有些數據類型,那就不是這麼回事了。
字符串類型
字符串類型後面()是限制插入字符串個數,常用的字符串類型就是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 |
+------------+----------+