MySQL數據類型筆記

引言

作為一個做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] //www.runoob.com/mysql/mysql-data-types.html
[2] //blog.csdn.net/qq_30046617/article/details/93380630