目錄
數據類型
定義數據類型的本質
定義數據類型本質上是在定義列
數據分類的意義
- 分配合適的存儲空間;
- 採用不同的操作方法;
- 對應不同的需求。
整數類型
- MySQL中提供多種對於數值的數據類型;
- 不同的數據類型取值範圍不同;
- 取值範圍越大,需要的存儲空間也越大。
有符號(默認)
創建一個含有tinyint字段的表:
mysql> create table t3
-> (col1 tinyint
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> show create table t3;
+-------+---------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------+
| t3 | CREATE TABLE `t3` (
`col1` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
插入一條127大小的數據:
mysql> insert into t3 values (127);
Query OK, 1 row affected (0.00 sec)
插入一條大於127數值的數據:
mysql> insert into t3 values (255);
Query OK, 1 row affected, 1 warning (0.00 sec)
查詢查看結果:
mysql> select * from t3;
+------+
| col1 |
+------+
| 127 |
| 127 |
+------+
2 rows in set (0.00 sec)
創建 tinyint 默認是有符號的,最大值爲 +127,所以插入大於127的數值默認爲127。
無符號
創建一個表,一個含有tinyint字段,且無符號的表:
mysql> create table t4
-> (col1 tinyint unsigned
-> );
Query OK, 0 rows affected (0.00 sec)
分別插入兩條數據,一條爲 127,一條大於 127的數據:
mysql> insert into t4 values (127);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values (255);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t4;
+------+
| col1 |
+------+
| 127 |
| 255 |
+------+
2 rows in set (0.00 sec)
注:
有無符號在創建表時指定,如果沒有指定,默認創建是有符號的。
指定最大顯示長度
並不是表示只能插入x數字,表示顯示最長x數字:
最大長度
創建一個長度爲10的int字段的表:
mysql> create table t5
-> (col1 int(10));
Query OK, 0 rows affected (0.01 sec)
插入一條長度爲10的數據:
mysql> insert into t5 values (1234567890);
Query OK, 1 row affected (0.01 sec)
插入一條長度大於10的數據:
mysql> insert into t5 values (12345678900);
Query OK, 1 row affected, 1 warning (0.00 sec)
查看數據:
mysql> select * from t5;
+------------+
| col1 |
+------------+
| 1234567890 |
| 2147483647 |
+------------+
3 rows in set (0.00 sec)
超出最大值,賦值默認最大值。
無影響
創建一個長度爲3的int字段的表,分別插入一條長度爲3,和一條長度爲4的數據:
mysql> create table t6
-> (col1 int(3));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t6 values(123);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t6 values(1234);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t6;
+------+
| col1 |
+------+
| 123 |
| 1234 |
+------+
2 rows in set (0.00 sec)
填充(zerofill)
創建一個長度爲3的int字段的表(zerofill填充),分別插入三條數據,長度爲別爲3,2,1:
mysql> create table t7 (col1 int(3) zerofill);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t7 values(123),(11),(1);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from t7;
+------+
| col1 |
+------+
| 123 |
| 011 |
| 001 |
+------+
3 rows in set (0.00 sec)
顯示長度,如果小於3,前面會用0填充;
整型類型的選擇
根據業務進行相應的選擇,以下舉例而已: