【MySQL資料型別1之--數值型別】

feixianxxx發表於2010-05-13

MySQL基本數值型別大致可以分成:

整數型別:TINYINTSAMLLINTMEDIUMINTINTBIGINT--1位元組、23.48

浮點數型別:FLOAT(m,d)DOUBLE(m,d)==REAL-4位元組、8

定點數型別:DECIMAL(m,d)NUMERIC-m+2位元組、8

位型別:BIT(m)-1-8位元組

各個型別的詳細範圍可以參考mysql文件

 

 

資料型別小例:

1.整數型別

create table t1

(

  id int,

  id2 int(4)

);

insert t1 select 1,2;

select * from t1;

+------+------+

| id   | id2  |

+------+------+

|    1 |    2 |

+------+------+

alter table t1 modify id int zerofill;

alter table t1 modify id2(4) int zerofill;

select * from t1;

+------------+------------+

| id         | id2        |

+------------+------------+

| 0000000001 | 0002      |

+------------+------------+

insert t1 select 1,11111;

Select * from t1;

+------------+------------+

| id         | id2        |

+------------+------------+

| 0000000001 | 0002 |

| 0000000001 | 11111 |

+------------+------------+

insert t1 select -1,-2;

+-------+------+---------------------------------------------+

| Level | Code | Message                                     |

+-------+------+---------------------------------------------+

| Error | 1264 | Out of range value for column 'id' at row 1 |

+-------+------+---------------------------------------------+

 

結論:

       1. INT型別預設寬度11

      2上面的zerofill屬性可以在int指定寬度不足時候在前面補上

      3.在插入的數值實際長度超過INT型別指定寬度時,忽略寬度,插入正確數值;

      4.在擁有zerofill屬性後的int欄位自動加上屬性UNSIGNED,範圍從0開始

 

 

2.小數型別

  小數分成浮點數和定點數。浮點數包括單精度的FLOAT和雙精度的DOUBLE;定點數則在內部以字串形式存放,比較是和貨幣等高精度資料。

  小數型別後面的(md)前者表示數字共有m個數字(整數+小數位),小數點後面有d個數字位。

create table t2

(

 col1 float(5,2),

 col2 decimal(5,2)

);

insert t2 select 1.11,1.11;

select * from t2;

+------+------+

| col1 | col2 |

+------+------+

| 1.11 | 1.11 |

+------+------+

insert t2 select 1.225,1.225;

select * from t2;

+------+------+

| col1 | col2 |

+------+------+

| 1.11 | 1.11 |

| 1.23 | 1.23 |

+------+------+

alter table t2 modify col1 float;

alter table t2 modify col2 decimal;

select * from t2;

+------+------+

| col1 | col2 |

+------+------+

| 1.11 |    1 |

| 1.23 |    1 |

| 1.11 |    1 |

+------+------+

insert t2 select 1.611111,1.6111111;

select * from t2;

+---------+------+

| col1    | col2 |

+---------+------+

|    1.11 |    1 |

|    1.23 |    1 |

|    1.11 |    1 |

| 1.61111 |    2 |

+---------+------+

 

結論:

1.指定了小數位數後,如果插入的數的小數位數超過,會自動截斷,並且四捨五入;

2.修改小數位數後,decima會對現有資料進行自動截斷,以符合現在的資料型別;

3.預設的decimalmd分別為10也就是預設整形;

 

 

3.bit數值型別

  Bit(m)m的範圍從1-64 預設為1

create table t3

(

  col bit(1)

);

insert t3 select 2;

+-------+------+-----------------------------------------+

| Level | Code | Message                                 |

+-------+------+-----------------------------------------+

| Error | 1406 | Data too long for column 'col' at row 1 |

+-------+------+-----------------------------------------+

alter table t3 modify col bit(6);

insert t3 select 2;

select * from t3;

+------+

| col  |

+------+

|      |

+------+

select BIN(col),hex(col) from t3 ;

+----------+----------+

| BIN(col) | hex(col) |

+----------+----------+

| 10       | 2        |

+----------+----------+

 

結論:

1.插入bit欄位數值時,首先會把值轉成2進位制;如果位數比自定的長度大,插入失敗;

    2.直接顯示bit型別資料,結果為null;需要使用 bin()或者hex()等函式轉化後顯示;

                                                    參考:MySQL5權威指南+深入淺出MySQL(網易)

 

 

相關文章