天天看點

mysql 資料類型

數值類型

 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則隻能選一個。