1. 程式人生 > >MySQL系列-常用資料型別

MySQL系列-常用資料型別

1.MySQL常用資料型別分類

日期型別 數字型別(整數和小數) 字元型別 二進位制型別

2.日期型別

MySQL資料型別位元組數含義
date3位元組日期,格式:2014-09-18
time3位元組時間,格式:08:42:30
datetime8位元組日期時間,格式:2014-09-18 08:42:30
timestamp4位元組

 格式和datetime一樣但是它可以根據mysql設定的時區自動修改

year1位元組

份,格式:2018 (範圍1901-2155)

3.整數型別

MySQL資料型別位元組數含義(帶有符號)
tinyint1位元組範圍(-128~127)
smallint2位元組範圍(-32768~32767)
mediumint
3字範圍(-8388608~8388607)
int4位元組範圍(-2147483648~2147483647)
bigint8位元組範圍(+-9.22*10的18次方)java中long範圍

4.浮點數型別

MySQL資料型別位元組數含義(帶有符號)
float(m, d)4位元組單精度浮點型,m總個數,d小數位,最大m-d整數位,預設(10,2)
double(m, d)8位元組

雙精度浮點型,m總個數,d小數位,最大m-d整數位,預設(16,4)

double 與 real 是一樣的

decimal(m, d)decimal是儲存為字串的浮點數,可以精確表示

float和 double會有精度丟失 例如以下程式碼:

mysql> insert into tc(ifloat) values('131072.32');
Query OK, 1 row affected

mysql> select* from tc;
+-----------+---------+----------+
| ifloat    | idouble | idecimal |
+-----------+---------+----------+
| 131072.31 | NULL    | NULL     |
+-----------+---------+----------+
1 row in set

float和double在計算機中的儲存格式就是二進位制所以難免有精度丟失,可以使用decimal代替。

mysql> insert tc(idecimal) values(131072.32);
Query OK, 1 row affected

mysql> select * from tc;
+--------+---------+-----------+
| ifloat | idouble | idecimal  |
+--------+---------+-----------+
| NULL   | NULL    | 131072.32 |
+--------+---------+-----------+
1 row in set 

表的設計如下:


5.字串型別

MySQL資料型別含義(帶有符號)
char(n)固定長度,n位字元,最多255個字元
varchar(n)可變長度,n位字元,最多(2^16-1)個字元
tinytext可變長度,最多255個字元
text可變長度,最多(2^16-1)個字元
mediumtext可變長度,最多(2^24-1)個字元
longtext可變長度,最多(2^32-1)個字元

6.二進位制型別

MySQL資料型別 含義
bit(M)M位二進位制,M最大64位 也就是8位元組
tinyblob可變長二進位制,資料最多255位元組
blob可變長二進位制,資料最多(2^16-1)位元組 64KB
mediumblob可變長二進位制,資料最多(2^24-1)位元組 16MB
 longblob可變長二進位制,資料最多(2^32-1)位元組 4GB

二進位制可以用來儲存圖片和視訊,但是一般都不會這樣用,這樣會導致MySQL連結被長期佔用以及資料庫伺服器一直在io處理資料,效率低下。

參考文章: