MySQL - 資料型別



資料型別指的是可以儲存在表列(欄位)中的資料型別,例如字串、整數、日期時間等。正確定義表中的欄位對於資料庫的整體最佳化非常重要。您應該只使用真正需要的欄位型別和大小。

在定義資料庫列時,請選擇與您希望儲存的實際資料大小和型別匹配的資料型別,而不是不必要地分配比需要更多空間。

MySQL 資料型別

在 MySQL 中,資料型別分為三大類:

  • 數值型
  • 日期和時間
  • 字串型別。

現在讓我們詳細討論它們。

數值資料型別

數值資料型別用於儲存數值,包括整數和小數。MySQL 使用所有標準 ANSI SQL 數值資料型別。

下表列出了常見的 MySQL 數值資料型別及其描述:

  • INT - 一種普通大小的整數,可以是有符號的或無符號的。如果是帶符號的,允許的範圍是從 -2147483648 到 2147483647。如果是無符號的,允許的範圍是從 0 到 4294967295。您可以指定最多 11 位的寬度。

  • TINYINT - 一種非常小的整數,可以是有符號的或無符號的。如果是帶符號的,允許的範圍是從 -128 到 127。如果是無符號的,允許的範圍是從 0 到 255。您可以指定最多 4 位的寬度。

  • SMALLINT - 一種小整數,可以是有符號的或無符號的。如果是帶符號的,允許的範圍是從 -32768 到 32767。如果是無符號的,允許的範圍是從 0 到 65535。您可以指定最多 5 位的寬度。

  • MEDIUMINT - 一種中等大小的整數,可以是有符號的或無符號的。如果是帶符號的,允許的範圍是從 -8388608 到 8388607。如果是無符號的,允許的範圍是從 0 到 16777215。您可以指定最多 9 位的寬度。

  • BIGINT - 一種大整數,可以是有符號的或無符號的。如果是帶符號的,允許的範圍是從 -9223372036854775808 到 9223372036854775807。如果是無符號的,允許的範圍是從 0 到 18446744073709551615。您可以指定最多 20 位的寬度。

  • FLOAT(M,D) - 一種浮點數,不能是無符號的。您可以定義顯示長度 (M) 和小數位數 (D)。這不是必需的,預設為 10,2,其中 2 是小數位數,10 是總位數(包括小數位數)。FLOAT 的小數精度可以達到 24 位。

  • DOUBLE(M,D) - 一種雙精度浮點數,不能是無符號的。您可以定義顯示長度 (M) 和小數位數 (D)。這不是必需的,預設為 16,4,其中 4 是小數位數。DOUBLE 的小數精度可以達到 53 位。REAL 是 DOUBLE 的同義詞。

  • DECIMAL(M,D) - 一種未打包的浮點數,不能是無符號的。在未打包的小數中,每個小數對應一個位元組。需要定義顯示長度 (M) 和小數位數 (D)。NUMERIC 是 DECIMAL 的同義詞。

日期和時間資料型別

MySQL 中的日期和時間資料型別用於儲存時間資料,包括日期、時間和兩者的組合。這些資料型別對於準確處理與日期和時間相關的資訊至關重要。

MySQL 的日期和時間資料型別如下:

  • DATE - YYYY-MM-DD 格式的日期,介於 1000-01-01 和 9999-12-31 之間。例如,1973 年 12 月 30 日將儲存為 1973-12-30。

  • DATETIME - YYYY-MM-DD HH:MM:SS 格式的日期和時間組合,介於 1000-01-01 00:00:00 和 9999-12-31 23:59:59 之間。例如,1973 年 12 月 30 日下午 3:30 將儲存為 1973-12-30 15:30:00。

  • TIMESTAMP - 介於 1970 年 1 月 1 日午夜和 2037 年某個時間之間的 timestamp。這看起來像之前的 DATETIME 格式,只是數字之間沒有連字元;1973 年 12 月 30 日下午 3:30 將儲存為 19731230153000(YYYYMMDDHHMMSS)。

  • TIME - 以 HH:MM:SS 格式儲存時間。

  • YEAR(M) - 以 2 位或 4 位格式儲存年份。如果長度指定為 2(例如 YEAR(2)),則 YEAR 可以介於 1970 年到 2069 年(70 到 69)之間。如果長度指定為 4,則 YEAR 可以是 1901 年到 2155 年。預設長度為 4。

字串資料型別

MySQL 中的字串資料型別用於儲存文字和基於字元的資訊。這些資料型別儲存各種長度和格式的文字資料。

下表描述了 MySQL 中常見的字串資料型別:

  • CHAR(M) - 長度在 1 到 255 個字元之間的定長字串(例如 CHAR(5)),儲存時用空格填充到指定的長度。定義長度不是必需的,但預設為 1。

  • VARCHAR(M) - 長度在 1 到 255 個字元之間的變長字串。例如,VARCHAR(25)。建立 VARCHAR 欄位時必須定義長度。

  • BLOB 或 TEXT - 最大長度為 65535 個字元的欄位。BLOB 是“二進位制大物件”,用於儲存大量二進位制資料,例如影像或其他型別的檔案。定義為 TEXT 的欄位也儲存大量資料。兩者之間的區別在於,儲存資料的排序和比較在 BLOB 中是區分大小寫的,而在 TEXT 欄位中是不區分大小寫的。您不必為 BLOB 或 TEXT 指定長度。

  • TINYBLOB 或 TINYTEXT − 一種 BLOB 或 TEXT 列,最大長度為 255 個字元。TINYBLOB 或 TINYTEXT 不需要指定長度。

  • MEDIUMBLOB 或 MEDIUMTEXT − 一種 BLOB 或 TEXT 列,最大長度為 16777215 個字元。MEDIUMBLOB 或 MEDIUMTEXT 不需要指定長度。

  • LONGBLOB 或 LONGTEXT − 一種 BLOB 或 TEXT 列,最大長度為 4294967295 個字元。LONGBLOB 或 LONGTEXT 不需要指定長度。

  • ENUM − 列舉型別,簡單來說就是一個列表。定義 ENUM 時,你實際上是在建立一個專案列表,其值必須從該列表中選擇(也可以為 NULL)。例如,如果希望欄位包含“A”、“B”或“C”,則將 ENUM 定義為 ENUM ('A', 'B', 'C'),只有這些值(或 NULL)才能填充該欄位。

廣告