少年阿賓

          那些青春的歲月

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

          ENUM 類型

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

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

          • 如果將一個無效值插入一個 ENUM (即,一個不在允許值列表中的字符串),空字符串將作為一個特殊的錯誤值被插入。事實上,這個字符串有別于一個"普通的"空字符串,因為這個字符串有個數字索引值為 0。稍后有更詳細描述。
          • 如果一個 ENUM 被聲明為 NULL,NULL 也是該列的一個合法值,并且該列的缺省值也將為 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 開始,當表被創建時,ENUM 值尾部的空格將會自動刪除。

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

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

          mysql> SELECT enum_col+0 FROM tbl_name;

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

          ENUM 值依照列規格說明中的列表順序進行排序。(換句話說,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 閱讀(514) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 伽师县| 沽源县| 尖扎县| 灵川县| 澄迈县| 永新县| 墨江| 新和县| 津市市| 丰原市| 永安市| 黔江区| 礼泉县| 乌鲁木齐县| 汶川县| 阜平县| 和龙市| 乾安县| 宁晋县| 延吉市| 彩票| 观塘区| 稻城县| 大埔县| 谷城县| 黄石市| 宿松县| 津南区| 泾川县| 鄂州市| 庆城县| 武夷山市| 共和县| 周口市| 苏尼特左旗| 海林市| 三门县| 平舆县| 松桃| 彰化市| 兴安盟|