跳轉到內容

MySQL/語言/資料型別

來自華夏公益教科書,開放的書籍,為開放的世界

VARCHAR 是 CHARACTER VARYING 的簡寫。'n' 代表最大列長度(最多 65,535 個字元)。VARCHAR(10) 列可以容納最大長度為 10 個字元的字串。實際所需的儲存空間為字串的長度 (L) 加上 1 或 2 個位元組(如果長度 < 255 則為 1 個位元組)來記錄字串的長度。
對於字串 'abcd',L 為 4,儲存需求為 5 個位元組。

CHAR(n) 與 varchar(n) 類似,唯一的區別是 char 將在資料庫中佔用固定長度的空間,而 varchar 將需要空間來儲存實際文字。因此,CHAR 欄位佔用更多儲存空間,但在索引[1]情況下搜尋速度快 20%。

TEXT 和 BLOB

[編輯 | 編輯原始碼]

BLOB 或 TEXT 列的最大長度為 65,535 個字元。所需的儲存空間為儲存資料的實際長度加上 2 個位元組(如果長度 < 255 則為 1 個位元組)。BLOB/TEXT 資料不儲存在表的 data 檔案中。這使得所有涉及 BLOB/TEXT 資料的操作(INSERT/UPDATE/DELETE/SELECT)變慢,但使得所有其他操作變快。

指定 n 值沒有任何影響。無論為 n 提供什麼值,儲存的最大(無符號)值為 429 crores。如果要新增負數,請在它旁邊新增“signed”關鍵字。

注意:要儲存大於限制的數字(例如:1234567890123456789),軟體可以告知操作已完成,即使實際上尚未完成。因此,在這種情況下,型別必須宣告為 BIGINT

備註:布林值宣告為 tinyint(1)

整數型別後面括號中的數字表示儲存的整數應顯示的位數[2]。但是,如果它比這更長,它不會影響它的儲存。

decimal(n,m) decimal(4,2) 表示最多可以儲存 99.99 的數字(而不是您可能預期的 9999.99)。四個數字,最後兩位保留給小數。

在三種類型 DATETIME、DATE 和 TIMESTAMP 中,DATE 型別用於您只需要日期值,而不需要時間部分的情況。MySQL 以 'YYYY-MM-DD' 格式檢索和顯示 DATE 值。DATETIME 型別用於您需要包含日期和時間資訊的日期值的情況。DATETIME 和 TIMESTAMP 之間的區別在於 TIMESTAMP 範圍限制在 1970-2037 年(見下文)。

TIME 可用於僅儲存一天的時間(HH:MM:SS),不包括日期。它還可以用於表示時間間隔(例如:-02:00:00 表示“過去兩個小時”)。範圍:'-838:59:59' => '838:59:59'。

YEAR 可用於僅儲存年份數字。


如果操縱日期,則必須指定實際日期,而不僅僅是時間 - 也就是說,MySQL 不會自動使用今天作為當前日期。相反,MySQL 甚至會將 HH:MM:SS 時間解釋為 YY:MM:DD 值,這可能是無效的。


以下示例顯示了基於 Unix 的時間戳的精確日期範圍,該範圍從 Unix 紀元開始,並在 通常的限制 (2038) 之前的第一個新年之前結束。

mysql> SET time_zone = '+00:00'; -- GMT
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT FROM_UNIXTIME(-1);
+-------------------+
| FROM_UNIXTIME(-1) |
+-------------------+
| NULL              |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(0); -- "Epoch"
+---------------------+
| FROM_UNIXTIME(0)    |
+---------------------+
| 1970-01-01 00:00:00 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(2145916799);
+---------------------------+
| FROM_UNIXTIME(2145916799) |
+---------------------------+
| 2037-12-31 23:59:59       |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(2145916800);
+---------------------------+
| FROM_UNIXTIME(2145916800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

set 和 enum

[編輯 | 編輯原始碼]

SET 資料型別可以從建立表時指定的預定義字串列表中儲存任意數量的字串。SET 資料型別類似於 ENUM 資料型別,因為它們都使用預定義的字串集,但 ENUM 資料型別將您限制為預定義字串集中的單個成員,而 SET 資料型別允許您從預定義的字串集中儲存任意值,從沒有到全部。

示例

SET("madam", "mister")    -- authorizes an empty field, "madam", "mister", "madam, mister", or "mister, madam"

ENUM("madam", "mister")   -- authorizes an empty field, "madam" or  "mister"

參考文獻

[編輯 | 編輯原始碼]
華夏公益教科書