(六)串行數據類型
SQL的數據類型決定了一個字段的內容在數據庫中會被如何處理、存儲和顯示。SQL92定義了標准的數據類型,目的是給數據庫制造商建立自己的數據類型提供藍圖。在前面的文章中,我們介紹了一些常用的數據類型,這些數據類型分為四大類:
串行
數值
日期時間
區間型
本文將向你概述這些數據類型在數據庫中是如何使用的,然後著重解釋串行數據類型。這些信息可以作為有用的參考,或者作為關於某個數據庫制造商具體產品中數據類型的背景知識。
使用數據類型
當你在數據庫中創建了一個表格,你就定義了每列的名字以及要輸入到這些列中的內容的數據類型。從先前的文章中借用一個例子:
CREATE TABLE Products
(prod_id INT(16)AUTO_INCREMENT, prod_color VARCHAR(20),
prod_descr VARCHAR(255), prod_size DECIMAL(8,2),
UNIQUE (`prod_id`));
在以上的查詢中,定義行prod_color VARCHAR(20)發出指令要創建一個列,名字是prod_color,數據類型是VARCHAR,長度為20。
你的數據庫使用和每個類型相關的描述符來區別數據類型。例如,VARCHAR數據類型的描述符所含的信息將它區別為串行數據型,它包含所有的串字符,其長度是可變的。數據庫裡列的定義還包含了其他信息,例如對應於數據類型的特定長度。
如前所述,每個數據庫制造商都希望在SQL92定義的標准上建立自己的數據類型。這樣每個數據庫在定義數據類型時都能夠設定自己所需要的最大容量限制和其他屬性。許多數據庫使用的數據類型名字和這裡列出來的一樣,盡管每種的實現方法都有微小的差別。要確定特定數據類型使用方法的細節最好的方法還是查閱數據庫制造商的文檔。
已經說過了,希望對標准字符串數據類型有更多的了解就往下看。
串
有兩種主要的串行數據類型:字符和位。串行使用數據庫裡由SQL_TEXT所定義的字符。SQL_92標准同時還提供了NATIONAL CHARACTER(國家字符集)和NATIONAL CHARACTER VARYING(國家字符集變體),這兩者都能使用可定義字符集。後者的處理方法和CHARACTER以及CHARACTER VARYING類型一樣。
CHARACTER | CHAR
使用方法:CHARACTER(clength) | CHAR(clength)
CHARACTER和CHAR這兩個關鍵字是相同的。
CHARACTER類型一個突出的特點是它們能夠包含<space(空白)>這個字符。
CHARACTER 類型包含了固定長度的串字符(來自SQL_TEXT的語言集),clength。
<space> 字符在值的長度小於clength時起填充作用。這表示CHARACTER字段的長度是固定的。
你可以把CHARACTER的數據類型字段和相同類型的其他允許不同長度的字段比較,或者和CHARACTER VARYING 數據類型比較。
有些數據庫允許和數值數據類型比較。
CHARACTER VARYING | CHAR VARYING | VARCHAR
使用方法:CHARACTER VARYING(maxlength) | CHAR VARYING(maxlength) | VARCHAR(maxlength)
CHARACTER VARYING,CHAR VARYING,和VARCHAR這幾個關鍵字是相同的。
這些類型能容納最大長度的字符串,maxlength。
數據庫把字段的長度作為值的實際長度。
你可以把這些數據類型的字段和相同類型的其他允許不同最大長度的字段比較。
BIT
使用方法:BIT(blength)
這種類型包含了帶有長度的位字符(1和0),blength。例如,如果我們使用BIT(2),樣本值將為“01”。
有的數據庫會在串的開頭插入空位,其的則會填充它們以符合固定長度的要求。
位字符是串,不是整數。
你可以把BIT數據類型的字段與相同類型的允許不同長度的其它字段比較,或者和BIT VARYING數據類型比較。
有些數據庫允許BITS和CHARACTER或者INTEGER類型比較。
BIT VARYING
使用方法: BIT VARYING(maxlength)
這種類型包含了最大長度的位字符,maxlength。
所記錄的長度被設為值的實際長度。
數據庫允許和其的BIT VARYING數據字段比較,或者和BIT的數據字段比較。
對我們的SQL系列有了一些了解了嗎?
請把你的評論、問題或者回應發到下面的討論欄,或者如果你有關於SQL基礎系列的論題,可以發到我們編輯的信箱。
串理論
數據庫生產商通過建立這些基礎的數據類型來創建你實際要實現的數據類型。對於字符串,這就可能包括相同名字的(不同)類型,例如CHAR或BIT,或者擴展到包括TEXT,SMALL TEXT,以及包含字符串的其他數據類型。
數據從一個數據庫遷移到另一個數據庫時,這種設計上的彈性產生了一個必須克服的障礙。在一個數據庫裡,你可能會有一個叫做CHAR的類型,這個類型所允許的最大容量大於你要遷移到的數據庫的最大容量。而且,(SQL92)標准中沒有明確定義的類型可能會變化較大,這樣的話只用遵從慣例來簡化遷移。
在ZDNet China最近的文章《BLOB移植的替換方案》中討論了存在數據類型移植問題時保護數據的一個可能的解決方案。SQL標准沒要包括存儲二進制數據的指標,這造成了不同數據庫制造商產品間的不兼容。軟件開發者必須找到提到方案列清除這些障礙。
在這個系列的下一篇文章中,我們會看看SQL92的數字數據類型,每個有什麼特點,以及對要實現這些類型的數據庫的要求。