1. 程式人生 > >MySQL基礎知識02數據類型(二)數值相關類型

MySQL基礎知識02數據類型(二)數值相關類型

idt 整數 ted top 使用 mys 支持 0 rows font

1.INT

MySQL支持5中整數類型,每個整數類型又可以分為有符號整數和無符號整數。

類型

字節數

TINYINT

1

SMALLINT

2

MEDIUMINT

3

INT

4

BIGINT

8

1.1.2. DECIMAL(NUMERIC)

MySQL使用DECIMAL表示定點數,NUMERICDECIMAL的一個別名。

DECIMAL(5,2)表示這個定點數類型的整數和小數部分總共5位,其中3位是整數,2位是小數。

DECIMAL的總位數最多65位,超出65則報錯。

mysql> create table n3 ( id numeric(66) primary key);

ERROR 1426 (42000): Too-big precision 66 specified for ‘id‘. Maximum is 65.

創建一個包含62位整數加3位小數的定點數類型的列的數據表。

mysql> create table n2 ( id numeric(65,3) primary key);

Query OK, 0 rows affected (0.02 sec)

mysql> show create table n2;

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

| Table | Create Table |

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

| n2 | CREATE TABLE `n2` (

`id` decimal(65,3) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

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

1 row in set (0.00 sec)

DECIMAL(65,3)類型中,小數部分超出3位時則自動截取為3位小數。

mysql> insert into n2 values (12345678901234567890123456789012345678901234567890123456789012.345);

Query OK, 1 row affected (0.05 sec)

mysql> insert into n2 values (12345678901234567890123456789012345678901234567890123456789012.12345);

Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> insert into n2 values (12345678901234567890123456789012345678901234567890123456789012);

Query OK, 1 row affected (0.01 sec)

mysql> select * from n2;

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

| id |

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

| 12345678901234567890123456789012345678901234567890123456789012.000 |

| 12345678901234567890123456789012345678901234567890123456789012.123 |

| 12345678901234567890123456789012345678901234567890123456789012.345 |

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

3 rows in set (0.00 sec)

DECIMAL(65,3)類型中,整數部分不允許超過62位。

mysql> insert into n2 values (12345678901234567890123456789012345678901234567890123456789012345);

ERROR 1264 (22003): Out of range value for column ‘id‘ at row 1

在使用DECIMAL類型時,如果不指定精度,則默認為DECIMAL(10,0)

mysql> create table n7 ( id decimal primary key);

Query OK, 0 rows affected (0.03 sec)

mysql> show create table n7;

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

| Table | Create Table |

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

| n7 | CREATE TABLE `n7` (

`id` decimal(10,0) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

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

1 row in set (0.00 sec)

定點數的運算:

mysql> select cast( 123456789012345678901234567890.1234567890 as decimal(40,10) ) + cast(1.1111111111 as decimal(40,10) );

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

| cast( 123456789012345678901234567890.1234567890 as decimal(40,10) ) + cast(1.1111111111 as decimal(40,10) ) |

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

| 123456789012345678901234567891.2345679001 |

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

1 row in set (0.01 sec)

2.FLOAT/DOUBLE

MySQL提供了浮點數FLOATDOUBLE類型,其中FLOAT占用4個字節,DOUBLE占用8個字節。

FLOAT(5,2)表示有3位整數加上2位小數的浮點數。

浮點數的查詢不能簡單的相等比較:

mysql> create table n8 ( id float(10,3) primary key);

Query OK, 0 rows affected (0.03 sec)

mysql> show create table n8;

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

| Table | Create Table |

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

| n8 | CREATE TABLE `n8` (

`id` float(10,3) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

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

1 row in set (0.00 sec)

mysql> insert into n8 values ( 1234567.123);

Query OK, 1 row affected (0.01 sec)

mysql> select * from n8;

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

| id |

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

| 1234567.125 |

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

1 row in set (0.00 sec)

mysql> select * from n8 where id=1234567.123;

Empty set (0.00 sec)

mysql> select * from n8 where id=1234567.125;

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

| id |

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

| 1234567.125 |

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

1 row in set (0.00 sec)

mysql> select * from n8 where id=1234567.126;

Empty set (0.00 sec)

上述查詢中,插入的原始數據是1234567.123,而查詢到的實際是1234567.125

MySQL基礎知識02數據類型(二)數值相關類型