MySQL 中有兩種特殊的數據類型 SET 和 ENUM,它們允許我們在表格的某個特定列中設置一組合法的值。在我們創建表格或列時,我們可以根據需要定義列的類型。下面是關于這兩種類型的介紹。
SET 數據類型
SET 數據類型是將某個列限定在一組預先定義好的值中,允許用戶在這組值之間進行選擇,每個選擇都有一個固定的數字值與之對應。定義一個 SET 類型的列 即可設置允許的值。比如,我們創建一個數據庫表 user,它有一個字段 sex,只能取值男、女、未知,那么我們可以使用下面這個語句進行創建:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `sex` set('男','女','未知') NOT NULL DEFAULT '未知', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET 類型的列有以下幾個特點:
- SET 數據類型的列最多可以有 64 個元素。
- SET 中的元素必須是常量,不能使用變量和表達式。
- SET 中的元素是按照插入的先后順序,從 1 開始編號的。
- 當設置不合法的值時,MySQL 自動截取掉超出列表的部分值,再進行插入。
ENUM 數據類型
ENUM 類型與 SET 類型類似,不同的是 ENUM 類型只允許取枚舉值中的一個元素。同樣以 sex 列為例,我們可以使用下面的語句來定義:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `sex` enum('男','女','未知') NOT NULL DEFAULT '未知', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ENUM 類型的列有以下幾個特點:
- 對于 ENUM 列,MySQL 會將每個元素都映射為一個整數值,取值范圍是 1 到元素數量。
- 如果聲明 ENUM 類列時沒有給出默認值,則其默認值為第一個枚舉值。
- 當使用不在枚舉列表中的值進行 INSERT 操作時,MySQL 會產生一個警告,然后在枚舉列表中自動添加這個值。