MySQL系列-常用資料型別
阿新 • • 發佈:2019-01-30
1.MySQL常用資料型別分類
日期型別 數字型別(整數和小數) 字元型別 二進位制型別
2.日期型別
MySQL資料型別 | 位元組數 | 含義 |
---|---|---|
date | 3位元組 | 日期,格式:2014-09-18 |
time | 3位元組 | 時間,格式:08:42:30 |
datetime | 8位元組 | 日期時間,格式:2014-09-18 08:42:30 |
timestamp | 4位元組 | 格式和datetime一樣但是它可以根據mysql設定的時區自動修改 |
year | 1位元組 | 年份,格式:2018 (範圍1901-2155) |
3.整數型別
MySQL資料型別 | 位元組數 | 含義(帶有符號) |
---|---|---|
tinyint | 1位元組 | 範圍(-128~127) |
smallint | 2位元組 | 範圍(-32768~32767) |
mediumint | 3字 | 範圍(-8388608~8388607) |
int | 4位元組 | 範圍(-2147483648~2147483647) |
bigint | 8位元組 | 範圍(+-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處理資料,效率低下。
參考文章: