隨筆 - 78  文章 - 25  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊

          實用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114345
          • 排名 - 515

          最新評論

          閱讀排行榜

          評論排行榜

          轉自:http://tech.itzero.com/2006/1015/1202.html

          我們要把現實世界中的各種信息轉換成計算機能理解的東西,這些轉換后的信息就形成了數據。例 如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等。數據不僅包括數字、字母、文字和其他特殊字符組成的文本形式的數據,而且還 包括圖形、圖像、動畫、影像、聲音等多媒體數據。但使用最多、最基本的仍然是文本數據。

          1. MySQL的數據類型

          在MySQL中有如下幾種數據類型:

          (1)數值型

          數值是諸如32 或153.4 這樣的值。MySQL 支持科學表示法,科學表示法由整數或浮點數后跟“e”或“E”、一個符號(“+”或“-”)和一個整數指數來表示。1.24E+12 和23.47e-1 都是合法的科學表示法表示的數。而1.24E12 不是合法的,因為指數前的符號未給出。

          浮點數由整數部分、一個小數點和小數部分組成。整數部分和小數部分可以分別為空,但不能同時為空。

          數值前可放一個負號“-”以表示負值。

          (2)字符(串)型

          字符型(也叫字符串型,簡稱串)是諸如“Hello, world!”或“一個饅頭引起的血案”這樣的值,或者是電話號碼87398413這樣的值。既可用單引號也可用雙引號將串值括起來。

          初學者往往分不清數值87398143和字符串87398143的區別。都是數字啊,怎么一 個要用數值型,一個要用字符型呢?關鍵就在于:數值型的87398143是要參與計算的,比如它是金融中的一個貨款總額;而字符型的87398143是不 參與計算的,只是表示電話號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。

          (3)日期和時間型

          日期和時間是一些諸如“2006-07-12”或“12:30:43”這樣的值。MySQL還支持日期/時間的組合,如“2006-07-12 12:30:43”。

          (4)NULL值

          NULL表示未知值。比如填寫表格中通訊地址不清楚留空不填寫,這就是NULL值。

          我們用Create Table語句創建一個表(參看前面的章節),這個表中包含列的定義。例如我們在前面創建了一個joke表,這個表中有content和writer兩個列:

          定義一個列的語法如下:

          其中列名由col_name 給出。列名可最多包含64個字符,字符包括字母、數字、下劃線及美元符號。列名可以名字中合法的任何符號(包括數字)開頭。但列名不能完全由數字組成,因 為那樣可能使其與數據分不開。MySQL保留諸如SELECT、DELETE和CREATE這樣的詞,這些詞不能用做列名,但是函數名(如POS 和MIN)是可以使用的。

          列類型col_type表示列可存儲的特定值。列類型說明符還能表示存放在列中的值的最大長 度。對于某些類型,可用一個數值明確地說明其長度。而另外一些值,其長度由類型名蘊含。例如,CHAR(10) 明確指定了10個字符的長度,而TINYBLOB值隱含最大長度為255個字符。有的類型說明符允許指定最大的顯示寬度(即顯示值時使用多少個字符)。浮 點類型允許指定小數位數,所以能控制浮點數的精度值為多少。

          可以在列類型之后指定可選的類型說明屬性,以及指定更多的常見屬性。屬性起修飾類型的作用,并更改其處理列值的方式,屬性有以下類型:

          (1)專用屬性用于指定列。例如,UNSIGNED 屬性只針對整型,而BINARY屬性只用于CHAR 和VARCHAR。

          (2)通用屬性除少數列之外可用于任意列。可以指定NULL 或NOT NULL 以表示某個列是否能夠存放NULL。還可以用DEFAULT,def_value 來表示在創建一個新行但未明確給出該列的值時,該列可賦予值def_value。def_value 必須為一個常量;它不能是表達式,也不能引用其他列。不能對BLOB 或TEXT 列指定缺省值。

          如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列類型之后、通用屬性之前即可。類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列類型和可能給出的列專用屬性之后即可。

          2. MySQL的列(字段)類型

          數據庫中的每個表都是由一個或多個列(字段)構成的。在用CREATE TABLE語句創建一個表時,要為每列(字段)指定一個類型。列(字段)的類型比數據類型更為細化,它精確地描述了給定表列(字段)可能包含的值的種類,如是否帶小數、是否文字很多。

          MySQL有整數和浮點數值的列類型,如表1所示。整數列類型可以有符號也可無符號。有一種特殊的屬性允許整數列值自動生成,這對需要唯一序列或標識號的應用系統來說是非常有用的。

           

          類型

           

          說明

          TINYINT 非常小的整數
          SMALLINT 較小整數
          MEDIUMINT 中等大小整數
          INT 標準整數
          BIGINT 較大整數
          FLOAT 單精度浮點數
          DOUBLE 雙精度浮點數
          DECIMAL 一個串的浮點數

           

          表1:數值列類型

          每種數值類型的名稱和取值范圍如表2所示。

           

          類型說明

           

          取值范圍

          TINYINT[(M)] 有符號值:-128 到127(- 27 到27 - 1)
          無符號值:0到255(0 到28 - 1)
          SMALLINT[(M)] 有符號值:-32768 到32767(- 215 到215 - 1)
          無符號值:0到65535(0 到21 6 - 1)
          MEDIUMINT[(M)] 有符號值:-8388608 到8388607(- 22 3 到22 3 - 1 )
          無符號值:0到16777215(0 到22 4 - 1)
          INT[(M)] 有符號值:-2147683648 到2147683647(- 231 到231- 1)
          無符號值:0到4294967295(0 到232 - 1)
          BIGINT[(M)] 有符號值:-9223372036854775808 到9223373036854775807(- 263到263-1)

          無符號值:0到18446744073709551615(0到264 – 1)
          FLOAT[(M, D)] 最小非零值:±1.175494351E - 38
          DOUBLE[(M,D)] 最小非零值:±2.2250738585072014E - 308
          DECIMAL (M, D) 可變;其值的范圍依賴于M 和D

           

          表2:數值列類型的取值范圍

           

          類型說明

           

          存儲需求

          TINYINT[(M)] 1字節
          SMALLINT[(M)] 2字節
          MEDIUMINT[(M)] 3字節
          INT[(M)] 4字節
          BIGINT[(M)] 8字節
          FLOAT[(M, D)] 4字節
          DOUBLE[(M, D)] 8字節
          DECIMAL (M, D) M字節(MySQL < 3.23),M+2字節(MySQL > 3.23 )

           

          表3:數值列類型的存儲需求

          MySQL提供了五種整型: TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。INT為INTEGER的縮寫。這些類型在可表示的取值范圍上是不同的。 整數列可定義為UNSIGNED從而禁用負值;這使列的取值范圍為0以上。各種類型的存儲量需求也是不同的。取值范圍較大的類型所需的存儲量較大。

           

          MySQL 提供三種浮點類型: FLOAT、DOUBLE和DECIMAL。與整型不同,浮點類型不能是UNSIGNED的,其取值范圍也與整型不同,這種不同不僅在于這些類型有最大 值,而且還有最小非零值。最小值提供了相應類型精度的一種度量,這對于記錄科學數據來說是非常重要的(當然,也有負的最大和最小值)。

          在選擇了某種數值類型時,應該考慮所要表示的值的范圍,只需選擇能覆蓋要取值的范圍的最小類 型即可。選擇較大類型會對空間造成浪費,使表不必要地增大,處理起來沒有選擇較小類型那樣有效。對于整型值,如果數據取值范圍較小,如人員年齡或兄弟姐妹 數,則TINYINT最合適。MEDIUMINT能夠表示數百萬的值并且可用于更多類型的值,但存儲代價較大。BIGINT在全部整型中取值范圍最大,而 且需要的存儲空間是表示范圍次大的整型INT類型的兩倍,因此只在確實需要時才用。對于浮點值,DOUBLE占用FLOAT的兩倍空間。除非特別需要高精 度或范圍極大的值,一般應使用只用一半存儲代價的FLOAT型來表示數據。

          在定義整型列時,可以指定可選的顯示尺寸M。如果這樣,M應該是一個1 到255的整數。它表示用來顯示列中值的字符數。例如,MEDIUMINT(4)指定了一個具有4個字符顯示寬度的MEDIUMINT列。如果定義了一個 沒有明確寬度的整數列,將會自動分配給它一個缺省的寬度。缺省值為每種類型的“最長”值的長度。如果某個特定值的可打印表示需要不止M個字符,則顯示完全 的值;不會將值截斷以適合M個字符。

          對每種浮點類型,可指定一個最大的顯示尺寸M 和小數位數D。M 的值應該取1 到255。D的值可為0 到3 0,但是不應大于M - 2(如果熟悉ODBC 術語,就會知道M 和D 對應于ODBC 概念的“精度”和“小數點位數”)。M和D對FLOAT和DOUBLE 都是可選的,但對于DECIMAL是必須的。在選項M 和D時,如果省略了它們,則使用缺省值。

          2.2字符串列類型

          MySQL提供了幾種存放字符數據的串類型,其類型如下:

           

          類型名

           

          說明

          CHAR 定長字符串
          VARCHAR 可變長字符串
          TINYBLOB 非常小的BLOB(二進制大對象)
          BLOB 小BLOB
          MEDIUMBLOB 中等的BLOB
          LONGBLOB 大BLOB
          TINYTEXT 非常小的文本串
          TEXT 小文本串
          MEDIUMTEXT 中等文本串
          LONGTEXT 大文本串
          ENUM 枚舉;列可賦予某個枚舉成員
          SET 集合;列可賦予多個集合成員

           

          表4:字符串列類型
          posted on 2009-06-30 16:53 期待明天 閱讀(229) 評論(0)  編輯  收藏 所屬分類: MySQL

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 汉源县| 江北区| 阳泉市| 沙湾县| 西昌市| 阳东县| 车险| 金昌市| 营口市| 黄陵县| 万荣县| 嵊泗县| 丹棱县| 工布江达县| 蕉岭县| 中卫市| 韩城市| 焉耆| 洛南县| 虹口区| 隆尧县| 陇南市| 通海县| 惠东县| 安义县| 苗栗市| 安龙县| 合肥市| 安陆市| 凤城市| 嘉峪关市| 缙云县| 水富县| 长阳| 抚松县| 渭南市| 阿合奇县| 明溪县| 双牌县| 砚山县| 惠水县|