標籤:mysql dba 資料類型
1. 背景
* MySQL支援SQL標準整數類型整數(或INT)和SMALLINT。作為標準的擴充,MySQL還支援整數類型TINYINT、MEDIUMINT和BIGINT
2. 整數類型所需的儲存和值範圍
| 類型 |
佔用空間 |
最小值 |
最大值 |
|
(位元組) |
(signed/Unsigned) |
(signed/Unsigned) |
| TINYINT |
1 |
-128 |
127 |
|
|
0 |
255 |
| SMALLINT |
2 |
-32768 |
32767 |
|
|
0 |
65535 |
| MEDIUMINT |
3 |
-8388608 |
8388607 |
|
|
0 |
16777215 |
| INT |
4 |
-2147483648 |
2147483647 |
|
|
0 |
4294967295 |
| BIGINT |
8 |
-9223372036854775808 |
9223372036854775807 |
|
|
0 |
18446744073709551615 |
3. zerofill 屬性遇到整數類型應用
* 建立zerofill測試表 zerofill_test
mysql> CREATE TABLE zerofill_test( -> `id` INT(6) ZEROFILL -> )ENGINE=INNODB CHARSET=utf8mb4;Query OK, 0 rows affected (0.08 sec)
* 插入數值長度小於6的值
mysql> INSERT INTO zerofill_test SELECT 11111;Query OK, 1 row affected (0.03 sec)Records: 1 Duplicates: 0 Warnings: 0
* 插入數值長度大於6的值
mysql> INSERT INTO zerofill_test SELECT 2222222;Query OK, 1 row affected (0.04 sec)Records: 1 Duplicates: 0 Warnings: 0
* 查看zerofill_test表所有的資料
mysql> SELECT * FROM zerofill_test;+---------+| id |+---------+| 011111 || 2222222 |+---------+2 rows in set (0.01 sec)
* zerofill總結
* 當顯示的值長度小於定義時INT定義的長度,高位補0顯示
* 當顯示的值長度大於定義時INT定義的長度,照常顯示
* zerofill顯示內容,值不做任何修改
4. Unsigned 類型溢出現象
* 建立unsigned測試表 unsigned_test
mysql> CREATE TABLE unsigned_test( -> id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT, -> data INT UNSIGNED -> )ENGINE=INNODB CHARSET=utf8mb4;Query OK, 0 rows affected (0.12 sec)
* 插入兩行一大一小的值
mysql> INSERT INTO unsigned_test SELECT null, 1;Query OK, 1 row affected (0.03 sec)Records: 1 Duplicates: 0 Warnings: 0mysql> INSERT INTO unsigned_test SELECT null, 2;Query OK, 1 row affected (0.01 sec)Records: 1 Duplicates: 0 Warnings: 0
* 查看錶中插入的資料值
mysql> SELECT * FROM unsigned_test;+----+------+| id | data |+----+------+| 1 | 1 || 2 | 2 |+----+------+2 rows in set (0.00 sec)
* 利用小數值對大數值做減運算
mysql> SELECT data - (SELECT data FROM unsigned_test where id=2) FROM unsigned_test where id=1;ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in ‘(`mytest`.`unsigned_test`.`data` - (select `mytest`.`unsigned_test`.`data` from `mytest`.`unsigned_test` where 1))‘
5. 整數類型應用總結
* signed/Unsigned: 是否有符號
* ZEROFILL: 顯示內容,值不做任何修改
* 推薦不要使用UNSIGNED, 範圍本質上沒有大的改變
* UNSIGNED可能會有溢出現象發生
* 自增INT 類型主鍵建議使用BIGINT
6. 總結
以需求驅動技術,技術本身沒有優略之分,只有業務之分。
本文出自 “sea” 部落格,請務必保留此出處http://lisea.blog.51cto.com/5491873/1943195
MySQL資料類型--------整數類型實戰