少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          MYSQL中 ENUM 類型的詳細解釋

          ENUM 類型

          ENUM 是一個字符串對象,其值通常選自一個允許值列表中,該列表在表創(chuàng)建時的列規(guī)格說明中被明確地列舉。

          在下列某些情況下,值也可以是空串("") 或 NULL

          • 如果將一個無效值插入一個 ENUM (即,一個不在允許值列表中的字符串),空字符串將作為一個特殊的錯誤值被插入。事實上,這個字符串有別于一個"普通的"空字符串,因為這個字符串有個數(shù)字索引值為 0。稍后有更詳細描述。
          • 如果一個 ENUM 被聲明為 NULLNULL 也是該列的一個合法值,并且該列的缺省值也將為 NULL 。如果一個 ENUM 被聲明為 NOT NULL,該列的缺省值將是該列表所允許值的第一個成員。

          每個枚舉值均有一個索引值:

          • 在列說明中列表值所允許的成員值被從 1 開始編號。
          • 空字符串錯誤值的索引值為 0。這就意味著,你可以使用下面所示的 SELECT 語句找出被賦于無效 ENUM 值的記錄行。
            mysql> SELECT * FROM tbl_name WHERE enum_col=0;
          • NULL 值的索引值為 NULL

          例如,指定為 ENUM("one", "two", "three") 的一個列,可以有下面所顯示的任一值。每個值的索引值也如下所示:

          索引值
          NULL NULL
          "" 0
          "one" 1
          "two" 2
          "three" 3

          換個枚舉最大可以有 65535 個成員值。

          從 MySQL 3.23.51 開始,當表被創(chuàng)建時,ENUM 值尾部的空格將會自動刪除。

          當為一個 ENUM 列賦值時,字母的大小寫是無關緊要的。然而,以后從列中檢索出來的值的大小寫卻是匹配于創(chuàng)建表時所指定的允許值。

          如果在一個數(shù)字語境中檢索一個ENUM,列值的索引值將被返回。例如,你可以像這樣使用數(shù)字值檢索一個 ENUM 列:

          mysql> SELECT enum_col+0 FROM tbl_name;

          如果將一個數(shù)字存儲到一個 ENUM 中,數(shù)字被當作為一個索引值,并且存儲的值是該索引值所對應的枚舉成員。(但是,這在 LOAD DATA 將不能工作,因為它視所有的輸入均為字符串。) 在一個 ENUM 字符串中存儲數(shù)字是不明智的,因為它可能會打亂思維。

          ENUM 值依照列規(guī)格說明中的列表順序進行排序。(換句話說,ENUM 值依照它們的索引號排序。)舉例來說,對于 ENUM("a", "b") "a" 排在 "b" 后,但是對于 ENUM("b", "a") "b" 卻排在 "a" 之前。空字符串排在非空字符串前,NULL 值排在其它所有的枚舉值前。為了防止意想不到的結果,建議依照字母的順序定義 ENUM 列表。也可以通過使用 GROUP BY CONCAT(col) 來確定該以字母順序排序而不是以索引值。

          如果希望得到一個 ENUM 列的所有可能值,可以使用 SHOW COLUMNS FROM table_name LIKE enum_colum

          posted on 2012-03-12 23:31 abin 閱讀(518) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 阳东县| 布拖县| 怀仁县| 城固县| 大关县| 宝应县| 汤阴县| 四子王旗| 高雄市| 老河口市| 都匀市| 微博| 靖安县| 德州市| 湟中县| 天祝| 新河县| 吴旗县| 兰坪| 互助| 高要市| 景德镇市| 昌平区| 邻水| 兰溪市| 克山县| 平昌县| 磐安县| 张家川| 周口市| 白城市| 海晏县| 望江县| 南部县| 徐汇区| 台州市| 远安县| 呈贡县| 雅安市| 亚东县| 宁河县|