MySQL資料型別筆記

一頭小菜雞發表於2020-05-10

引言

作為一個做Java後端的開發者,無論是在自己平時專案學習實戰還是工作中的真實專案,都離不開和資料庫打交道。而MySQL作為當今最流行的關係型資料庫之一,也成為了我們必須掌握的一門技術。最近在工作專案中碰到過好幾次MySQL資料型別相關問題,比如欄位型別大小越界啦,欄位型別長度不夠啦pilipala......,所以今天抽空好好做個筆記總結一下。在這裡呢只總結MySQL的資料型別的基本知識,不會牽扯到索引或儲存引擎之類的知識(因為索引和儲存引擎的知識足夠寫一本很厚很厚的書了)。


數值型別

其中對應於java中的型別都是基於mybatis生成對應的,實際上有符號和無符號對應於java中型別可能是不一樣的。

  • TINYINT:大小(1byte),範圍(有符號為-128到127,無符號為0到255),用於小整數值,對應於java中的Byte型別;
  • SMALLINT:大小(2byte),範圍(有符號為-32768到32767,無符號為0到65535),用於大整數值,對應於java中的Short型別;
  • MEDIUMINT:大小(3byte),範圍(有符號為-8388608到8388607,無符號為0到65535),用於大整數值,對應於java中的Integer型別
  • INT或INTEGER:大小(4byte),範圍(有符號為-2147483648到2147483647,無符號為0到4294967295),用於大整數值,也對應於java中的Integer型別
  • BIGINT:大小(8位元組),範圍(有符號為-9223372036854775808到9223372036854775807,無符號為0到18446744073709551615),用於極大整數值,對應於java中的Long型別
  • FLOAT:大小(4位元組),範圍(有符號為-3.402 823 466 E+38到-1.175 494 351 E-38),0,(1.175 494 351 E-38到3.402 823 466 351 E+38,無符號為0~18446744073709551615),用於單精度浮點值,對應於java中的Float型別
  • DOUBLE:大小(8位元組),範圍((-1.797 693 134 862 315 7 E+308 到-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308 到 1.797 693 134 862 315 7 E+308)),用於雙精度浮點值,對應於java中的Double型別;
  • DECIMAL:大小(對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2),範圍(依賴於M和D的值),用於小數值,尤其用於金融相關,對應於java中的Long型別;

日期和時間型別

mybatis生成時都對應到java中的Date型別

  • DATE:大小(3byte),範圍(1000-01-01到9999-12-31),格式(YYYY-MM-DD),用於日期值;
  • TIME:大小(3byte),範圍(-838:59:59到838:59:59),格式(HH:MM:SS),用於連續時間;
  • TIMESTAMP:大小(4byte),範圍(1970-01-01 00:00:00/2038,結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07),格式(YYYY-MM-DD HH:MM:SS),用於混合日期和時間值
  • DATETIME:大小(8byte),範圍(1000-01-01 00:00:00到9999-12-31 23:59:59),格式(YYYY-MM-DD HH:MM:SS),也用於混合日期+時間值

字串型別

  • CHAR(n):大小(0~255 byte,注意定義時指定的n為字元數,而不是位元組數),用於定長字串;
  • VARCHAR(n):大小(0~65535 byte,n也是指的字元數),用於變長字串;
  • TINYBLOB:大小(0~255 byte),用於不超過 255 個字元的二進位制字串;
  • BLOB:大小(0~65535 bytes),用於二進位制形式的長文字資料;
  • MEDIUMBLOB:大小(0~16777215 bytes),用於二進位制形式的中等長度文字資料;
  • LONGBLOB:大小(0~4294967295 bytes),用於二進位制形式的極大文字資料;
  • TINYTEXT:大小(0~255 bytes),用於短文字字串;
  • TEXT:大小(0-65 535 bytes),用於長文字資料
  • MEDIUMTEXT:大小(0~16777215 bytes),用於中等長度文字字資料;
  • LONGTEXT:(0~4294967295 bytes),用於極大文字資料(足夠足夠大了,再長的文字資料也基本上夠你用了);

  • 對了,還有一個BIT布林型別,對應於java中的Boolean型別

總之吧,好記性不如爛筆頭嘛,做個筆記和總結,讓自己以後建立資料表的時候或者新增欄位的時候能夠正確的選擇MySQL的欄位資料型別。如果還是記不住,那就來這裡翻一下就好了,也不用這裡搜那裡查了,看自己的這篇筆記基本就夠了。

Reference

[1] https://www.runoob.com/mysql/mysql-data-types.html
[2] https://blog.csdn.net/qq_30046617/article/details/93380630

相關文章