少年阿賓

          那些青春的歲月

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

          ENUM 類型

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

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

          • 如果將一個無效值插入一個 ENUM (即,一個不在允許值列表中的字符串),空字符串將作為一個特殊的錯誤值被插入。事實上,這個字符串有別于一個"普通的"空字符串,因為這個字符串有個數字索引值為 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 開始,當表被創建時,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 閱讀(518) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 彰武县| 芦溪县| 湖口县| 沅陵县| 苍梧县| 南京市| 曲沃县| 清流县| 宜兰市| 邹城市| 涞水县| 贵溪市| 泉州市| 商都县| 栾城县| 洮南市| 钟祥市| 仲巴县| 禄劝| 景宁| 越西县| 玉山县| 宝山区| 卢龙县| 筠连县| 马鞍山市| 建平县| 楚雄市| 闽清县| 旬邑县| 婺源县| 舟曲县| 富裕县| 措勤县| 公主岭市| 韶山市| 南木林县| 石柱| 牡丹江市| 宜宾县| 北海市|