數值類型
1.整數類型(有符号、無符号)
整數類型 | 是否為标準sql類型 | 位元組 | 有符号最小值 | 有符号最大值 | 無符号最小值 | 無符号最大值 |
tinyint | 是 | 1位元組 | -128 | 127 | 255 | |
smallint | -- | 2位元組 | -32768 | 32767 | 65535 | |
mediumint | 3位元組 | -8388608 | 8388607 | 1677215 | ||
int或integer | 4位元組 | -2147483648 | 2147483647 | 4294967295 | ||
bigint | 8位元組 | -9223372036854775808 | 9223372036854775807 | 18446744073709551615 |
(1)對于整型資料,MySQL 還支援在類型名稱後面的小括号内指定顯示寬度,例如int(5)表示當數值寬度小于5位的時候在數字前面填滿寬度,如果不指定預設為 int(11)。一般配合zerofill使用,顧名思義,zerofill就是用“0”填充的意思。以下幾個例子分别描述了填充前後的差別。
drop table test;
create table test (id1 int,id2 int(5));
insert into test values(1,1);
select * from test;
| 1 | 1 |
alter table test modify id1 int zerofill;
alter table test modify id2 int(5) zerofill;
| 0000000001 | 00001 | -- 在指令行下起作用,在navicat 中不起作用
如果一個列指定為 zerofill,則 MySQL 自動為該列添加無符号屬性。
設定了寬度限制後,如果插入大于寬度限制的值,不會對插入的資料有任何影響,還是按照類型的實際精度進行儲存,這時,寬度格式實際已經沒
有意義。表 test 的字段 id1 中插入數值 1,id2 中插入數值 1234567,位數為 7,大于 id2 的顯示位數 5。
drop table test;
create table test (id1 int,id2 int(5));
insert into test values(1,1234567);
select * from test;
| 0000000001 | 1234567 |
(2)整數類型還有一個屬性:auto_increment。在需要産生唯一辨別符或順序值時,可利用此屬性。auto_increment 值一般從 1 開始,每行增加 1。在插入 null 到一個 auto_increment 列時,mysql 插入一個比該列中目前最大值大 1 的值。一個表中最多隻能有一個auto_increment列。
2.浮點數類型(小數類型)
浮點數類型 | 最小值 | 最大值 | 備注 | ||
float | 是 | ±1.75494351E-38 | ±3.402823466E+38 | 當需要精确到小數點10位以後,選擇double類型。 | |
double | ±2.2250738585072014E-308 | ±1.7976931348623157E+308 |
3.定點數類型(小數類型)
定點數類型 | |||||
dec(m,d)或decimal(m,d) | m+2 | 與double相同 | 該類型的取值範圍和double相同,但有效值範圍由m和d來決定 | ||
float、double資料類型存儲的是近似值,而dec存儲的是字元串,是以它的精度更高; 在需要表示金額等貨币類型時,優先選擇dec類型 |
浮點數和定點數都可以用類型名稱後加“(M,D)”的方式來進行表示,“(M,D)”表示該值一共顯示 M 位數字(整數位+小數位)。
定點數類型不指定精度時,預設的整數位為 10,預設的小數位為 0。
浮點數如果不寫精度和标度,則會按照實際精度值顯示,如果有精度和标度,則會自動将四舍五入後的結果插入,系統不會報錯;定點數如果不寫精度和标度,則按照預設值 decimal(10,0)來進行操作,并且如果資料超越了精度和标度值,系統則會報錯。
4.位類型 BIT(M)
對于 BIT(位)類型,用于存放位字段值,BIT(M)可以用來存放多位二進制數,M 範圍從 1~64,如果不寫則預設為 1 位。
對于位字段,直接使用 SELECT 指令将不會看到結果,可以用 bin()(顯示為二進制格式)或者 hex()(顯示為十六進制格式)函數進行讀取。
mysql> desc test;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra|
| id | bit(1) | YES| | NULL | |
insert into test values(1);
select * from test;
+------+
| id |
| |
select bin(id),hex(id) from test;
+---------+---------+
| bin(id) | hex(id) |
| 1 | 1 |
資料插入 bit 類型字段時,首先轉換為二進制,如果位數允許,将成功插入;如果位數小于實際定義的位數,則插入失敗。
insert into test values(2); 報錯
因為 2 的二進制碼是“10”,而 id 的定義是 bit(1),是以無法插入。
alter table test modify id bit(2);
insert into test values(2);
| 1 | 1 |
| 10 | 2 |
字元串類型
char(m) m 為 0~255 之間的整數
varchar(m) m 為 0~65535 之間的整數,值的長度+1 個位元組
tinyblob 允許長度 0~255 位元組,值的長度+1 個位元組
blob 允許長度 0~65535 位元組,值的長度+2 個位元組
mediumblob 允許長度 0~167772150 位元組,值的長度+3 個位元組
longblob 允許長度 0~4294967295 位元組,值的長度+4 個位元組
tinytext 允許長度 0~255 位元組,值的長度+2 個位元組
text 允許長度 0~65535 位元組,值的長度+2 個位元組
mediumtext 允許長度 0~167772150 位元組,值的長度+3 個位元組
longtext 允許長度 0~4294967295 位元組,值的長度+4 個位元組
enum 類型
enum 中文名稱叫枚舉類型,它的值範圍需要在建立表時通過枚舉方式顯式指定,對 1~255 個成員的枚舉需要 1 個位元組存儲;對于255~65535 個成員,需要 2 個位元組存儲。最多允許有 65535 個成員。
create table test(sex enum('男','女','未說明性别','未知'));
insert into test values('男'),('女'),('未說明性别'),('未知');
insert into test values('1'),('2'),('3');
insert into test values(1),(2),(3);
insert into test values('0'); //插入空字元串'',不是null
insert into test values(0); //報錯
insert into test values('男人');//報錯
select * from test where sex != '';
set 類型
create table t (col set ('a','b','c','d');
insert into t values('a,b'),('a,d,a'),('a,b'),('a,c'),('a');
Set 和 ENUM 差別在于 Set 類型一次可以選取多個成員,而 ENUM則隻能選一個。