MySQL學習之數據類型

  1. 數據庫類型
    通過給數據的不同類型強加一個一致的模式,是系統能夠識別一個特定的數據屬於一個特定的類型,這樣就可以使用這個類型的特性來操作數據。
    強大的數據分類把每個類型與特定的行爲聯繫在一起,執行這些行爲可以預防人爲的錯誤。數據分類在不同數據如何相互作用方面排除了不確定性,他可以減少開發者不得不寫的維護系統完整性的代碼的數量。
    性能的合理使用可以導致更小數據庫和表、有效的索引和更快速的執行查詢,而類型的無節制的、過度的使用將導致膨脹的表、存儲空間的浪費、低效的索引和在性能上的退化。
  2. 數值類型
    MySQL 的數值數據類型可以大致劃分爲兩個類型,一個整數、一個浮點。
    MySQL 允許我們指定數值字段中的值是否有正負之分或者用零填補

    在 MySQL 中支持的5個主要整數類型是 tinyint (1個字節)、smallint(2個字節)、mediumint(3個字節)、int(4個字節)和bigint(8個字節)。這些類型在很大的程度上時相同的,只有他們存儲的值的大小是不相同的。
    MySQL 以一個可選擇的顯示寬度指示器的形式對 SQL 標準進行擴展,這樣當從數據空檢索一個值時,可以把這個值加長到指定的長度。
    例如,指定一個字段的類型爲(int(6)),就可以保證所包含數字少於6個的值從數據庫中檢索出來時能夠自動的用空格填充。
    使用一個寬度指示器不會影響字段的大小和它可以存儲的值的範圍。
    如果我們存儲的字段超出允許範圍的數字,MySQL 會根據允許範圍最接近它的一端截斷它。
    另外,MySQL 會將不合規定的值在插入表之前自動改爲0,。
    每個整數類型還可以接受一個或者兩個下面的可以影響他的顯示和存儲方式的修飾符:
            unsigned:該修飾符規定字段只保存正的值,它可以增大這個字段支持的範圍。
            zerofill:該修飾符規定0(不是空格)可以用於填補輸出值。使用這個修飾符可以防止 MySQL 存儲負值。

    在 MySQL 中支持三個浮點類型是:float、double和decimal類型。
    與整數類型一樣、這些類型也帶有附加參數:一個顯示寬度指示器和一個小數點指示器。
    例如:float(5,2)規定顯示的值不會超過5位數字,小數點後帶有2爲數字。
    對於小數點後面的數字個數超過了允許的數目的值,系統會自動將它四捨五入爲最接近它的值,然後插入它。
    decimal:用戶要求非常高的精確度的計算中,這些類型允許指定數值的精確度和計數方法作爲選擇參數。精確度在這裏指爲這個值保存的有效數字的總個數,而計數方法表示小數點後的數字的個數。
    例如:decimal(5,2)規定了存儲的值將不會超過5位數字,並且小數點後面有2位數字。
    MySQL 默認的 decimal 的精確度爲10,計算方法默認爲0;
  3. 字符串類型
    在 MySQL 中支持8個基本的字符串類型:char、varchar、tinyblob、tinytext、blob、text、mediumblob、mediumtext、longblob、longtext類型

    char類型認可一個可選擇的 binary 修飾符,當用於比較運算時,這個修飾符使char類型以一個二進制方式(不是傳統的區分大小寫)起作用。

    varchar是char的一個變體,他們的區別在於 MySQL 處理這個指示器的方式:char把這個大小視爲值的準確大小(用空格填補比較短的值,所以達到了這個大小),二varchar類型把它視爲最大值並且只使用了存儲字符串實際上需要的字節數(增加一個額外的字節記錄長度)。因而,較短的值當被插入一個語句爲varchar類型的字段時,將不會用空格填補(然而,較長的值仍然被截斷)。因爲字段會根據它的內容動態的增長和縮短,所以當不確定字段要存儲多少個字符時,使用 varchar 類型是一個好的想法;因爲 varchar 類型只使用需要的最小數目的字節,所以它在數據庫性能方面導致了更大的存儲效率和(可能)空前的改進。

    text 和blob用於存儲比較長的字符串(即長度超過255個字符的字符串),根據要存儲數據的大小,它們都有不同的子類型。這些大數據量的類型用於存儲大的文本塊或者圖像、聲音文件那樣的二進制數據。
    blob 類型區分大小寫,text 類型不區分大小寫。
  4. 日期和時間類型
    MySQL 帶有5個不同的數據類型可供選擇:date、time、year、datetime、timestamp類型
    沒有冒號分隔符的time類型值可能被 MySQL 解釋爲持續時間,而不是時間戳

    MySQL 對日期的年份中的兩個數字的值,或是語句爲 year 類型的輸入字段中的兩個數字輸入執行這種類型的最大限度的通譯。因爲所有的 year 類型的值必須用4個數字存儲,所有 MySQL 試圖根據值的數字範圍把兩個數字的年份轉換爲4個數字的值:把在00·69範圍內的值轉換到2000·2069 範圍內,而把70·99範圍內的值轉換到1970·1979之內。

    datetime和timestamp這兩種類型通常用於自動存儲包含當前日期和時間的時間戳,並且對執行大量數據庫事務和需要建立一個調試和審查用途的審計跟蹤的應用程序可以派上用場。
    如果一個行中第一個字段語句爲 timestamp 類型,而且這個字段沒有被明確地指定值或者被指定了一個 null 值,MySQL 將會自動用當前的日期和時間填充它。
    使用 MySQL 的 now()函數在語句爲 datatime 類型的字段中填充當前的日期和時間可以得到相同的結果。
    雖然 MySQL 允許使用自定義的 timestamp 格式,但是他不提倡這種用法。原因是:如果我們在一個 timestamp 字段上使用自定義格式,MySQL 就不能夠在這個字段上使用關鍵字。而且輸出格式要通過使用 date_format() 函數才能得到。
    在合法範圍以外的日期和時間值通常被轉換爲最接近它的合法範圍的邊界點值,然後保存它。
  5. 複合類型
    MySQL 有兩個複合類型 enum 和 set,雖然這兩個在類型在技術上時字符串類型,但是還是把他看成不同的分類,因爲他們的值必須從一個預先定義好的字符串集合中選取。一個enum類型從一個允許值集合中只選擇單個值;set類型允許從可選集合中選擇任意多個值。

    enum類型在允許從集合中只選擇單個值時,通常用於互斥的數據值。一個常見的列子是特別屬性,它或者是男或者是女性。並且允許成員中的唯一的值或null值,任何不適用這些值而使用其他值的操作都將使 MySQL 插入一個空的字符串。如果插入值的大小寫與在字段語句中相對應值的大小寫不匹配,那麼出入值的大小寫將自動改變爲與字段語句相匹配,雖然 enum的元素只能指定爲字符串,但是他們在系統內部可以存儲爲數字並且從1開始用數字做索引,
    一個 enum 類型最多可以包含65536個元素,其中一個元素爲 MySQL 保留,用來保存錯誤信息,這個錯誤值用索引0或者一個空字符串表示。
    MySQL 認爲在 enum 類型語句中出現的唯一值是合法的,除了這些值外,其他任何插入值的企圖都將失敗,MySQL 用錯誤值表示出現錯誤了。這意味着僅僅通過搜索包含空字符串或對應數字索引爲0的行就可以很容易地查出錯誤記錄的位置。

    set類型允許從預先定義的字符串值集合中選取任意數目的值。爲set類型的字段可以包含0個,1個或1個以上從允許值集合中選取的值,這使set類型可以做多個選擇的選取。與enum類型一樣,任何企圖使用一個不再預先定義集合中的值的操作都會使用mysql插入一個空字符串。如果視圖插入一個既包含合法元素又包含非法元素的記錄,mysqL 將會除去非法的部分。
    一個set類型最多可以包含64項。在set類型中,值被存儲爲一個分離的位序列,這些位表示與它相對應的選取項。並且set類型中沒有重複的元素。
    查找包含錯誤數據的記錄的位置時,需要做的是查找包含空字符串或二進制值爲0的行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章