1. 對整數類型, MySQL 還支援類型名稱後面的小括号内指定的顯示寬度,例如int(5) 表示寬度小于5位時填滿寬度,如果不顯示指定寬度預設是int(11),一般配合zerofill使用下面來描述下
-- 建立表t1 有id1和id2字段,指定數值寬度分别為int 和int(5)
CREATE TABLE t1(id1 INT, id2 INT(5));
-- 在裡面都插入1
INSERT INTO t1 VALUES(1,1);
-- 查詢格式沒有異常, 值是 id1=1, id2=1
SELECT * FROM t1;
-- 分别修改id1 和id2字段類型, 加入 zerofill參數
ALTER TABLE t1 MODIFY id1 INT ZEROFILL;
ALTER TABLE t1 MODIFY id2 INT(5) ZEROFILL;
-- 再次查詢時 id1=0000000001, id2=00001
SELECT * FROM t1;
2. 整數類型還有一個屬性 auto_increment。産生唯一辨別,值一般從1開始,每行增加1. 定義為not null , 并且定義primary key或unique鍵如下:
CREATE TABLE a1 (id INT AUTO_INCREMENT NOT NULL,PRIMARY KEY);
CREATE TABLE a1 (id INT AUTO_INCREMENT NOT NULL,PRIMARY KEY(id));
CREATE TABLE a1 (id INT AUTO_INCREMENT NOT NULL,UNIQUE(id));
3. 對于小數表示, MySQL分為浮點數和定點數
浮點數包括float,double。 定點數decimal 它是以字元串形式存放的,比浮點數精确, 用于傾向等精度高的資料。
浮點數和定點數都可以加(M,D) 如:float(7,4) 值-999.9999 儲存時進行了四舍五入, 如果插入是999.00009 ,值結果是999.0001。注意浮點資料後面跟(M,D)是非标準用法。
定點數deciaml不指定精度時,預設整數為10, 預設小數位為0。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcukDOzYmZkRjZ0MjNlFWYmNjZlZjM2cjYyU2Y4cTO1YzNvwFO5gjM5QDOtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
MySQL 的資料類型
在翻看老的資料表設計時,發現一個問題:資料表結構中存在 bigint(20) 類型的字段,但是 Java 中 Long 的最大值為 9223372036854775807,總共 19 位長度,那麼問題來了,bigint(20) 的資料類型設計是否會造成 Java 類型的精度溢出問題?下面我們來分析一下這個問題,如有不正之處,歡迎批評指正。
MySQL 整型類型
資料格式:類型 [(M)] [UNSIGNED] [ZEROFILL]
TINYINT
M預設值為4
8位二進制數。
帶符号資料範圍:-128 到 127。
無符号資料範圍:0到255。
SMALLINT
M預設值為6
16位二進制數。
帶符号資料範圍:-32768 到 32767。
無符号資料範圍:0 到 65535。
MEDIUMINT
M預設值為9
24位二進制數。
帶符号資料範圍:-8388608 到 8388607。
無符号資料範圍:0 到 16777215。
INT
M預設值為11
32位二進制數。
帶符号資料範圍:-2147483648 到 2147483647。
無符号資料範圍:0 到 4294967295。
BIGINT
M預設值為20
64位二進制數。
帶符号資料範圍:-9223372036854775808 到 9223372036854775807。
無符号資料範圍:0 到 18446744073709551615。
注意
我們進行資料表設計時,喜歡用 bigint(20)、int(10)、tinyint(2)之類的資料類型,類型後的數字并不表示資料存儲長度,而是表示字段要顯示的長度,隻有在字段設定為 zerofill(以0填充)時,顯示長度才會生效。
例如:
int(5):假如列的值為99,如果該列指定了 zerofill,則在查詢結果中會顯示為 00099。
其他類型
BIT[M]
bit位類型,M 表示 bit 的位數,範圍從1到64,如果 M 被忽略,預設為1。
BOOLEAN
MySQL 會将 BOOLEAN 類型轉換為 TINYINT(4)。