以下為SQL SERVER7.0以上版本的字段類型說明。SQL SERVER6.5的字段類型說明請參考SQL SERVER提供的說明。 bit:0或1的整型數字 int:從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字 smallint:從-2^15(-32,768)到2^15(32,767)的整型數字 tinyint:從0到255的整型數字
decimal:從-10^38到10^38-1的定精度與有效位數的數字 numeric:decimal的同義詞
money:從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數據,最小貨幣單位千分之十 smallmoney:從-214,748.3648到214,748.3647的貨幣數據,最小貨幣單位千分之十
float:從-1.79E+308到1.79E+308可變精度的數字 real:從-3.04E+38到3.04E+38可變精度的數字
datetime:從1753年1月1日到9999年12日31的日期和時間數據,最小時間單位為百分之三秒或3.33毫秒 smalldatetime:從1900年1月1日到2079年6月6日的日期和時間數據,最小時間單位為分鐘
timestamp:時間戳,一個數據庫寬度的唯一數字 uniqueidentifier:全球唯一標識符GUID
char:定長非Unicode的字符型數據,最大長度為8000 varchar:變長非Unicode的字符型數據,最大長度為8000 text:變長非Unicode的字符型數據,最大長度為2^31-1(2G)
nchar:定長Unicode的字符型數據,最大長度為8000 nvarchar:變長Unicode的字符型數據,最大長度為8000 ntext:變長Unicode的字符型數據,最大長度為2^31-1(2G)
binary:定長二進制數據,最大長度為8000 varbinary:變長二進制數據,最大長度為8000 image:變長二進制數據,最大長度為2^31-1(2G)
整數數據類型 INT 或INTEGER SMALLINT TINYINT BIGINT 浮點數據類型 REAL FLOAT DECIMAL NUMERIC 二進制數據類型 BINARY VARBINARY 邏輯數據類型 BIT 字符數據類型 CHAR NCHAR VARCHAR NVARCHAR 文本和圖形數據類型 TEXT NTEXT IMAGE 日期和時間數據類型 DATETIME SMALLDATETIME 貨幣數據類型 MONEY SMALLMONEY 特定數據類型 TIMESTAMP UNIQUEIDENTIFIER 用戶自定義數據類型 SYSNAME 新數據類型 SQL_VARIANT TABLE 其中BIGINT SQL_VARIANT 和TABLE 是SQL Server 2000 中新增加的3 種數據類型下面分類講述各種數據類型 一、 整數數據類型 整數數據類型是最常用的數據類型之一 1、 INT INTEGER INT 或INTEGER 數據類型存儲從-231 -2 147 483 648 到231-1 2 147 483 647 之間的所有正負整數每個INT 類型的數據按4 個字節存儲其中1 位表示整數值的正負號其它31 位表示整數值的長度和大小 2 、SMALLINT SMALLINT 數據類型存儲從-215 -32 768 到215-1 32 767 之間的所有正負整數每個MALLINT 類型的數據占用2 個字節的存儲空間其中1 位表示整數值的正負號其它15 位表示整數值的長度和大小 3 、TINYINT TINYINT數據類型存儲從0 到255 之間的所有正整數每個TINYINT類型的數據占用1 個字節的存儲空間 4、 BIGINT BIGINT 數據類型存儲從-2^63 -9 223 372 036 854 775 807 到2^63-1 9 223 372 036 854 775 807 之間的所有正負整數每個BIGINT 類型的數據占用8個字節的存儲空間 二、浮點數據類型 浮點數據類型用于存儲十進制小數浮點數值的數據在SQL Server 中采用上舍入Round up 或稱為只入不舍方式進行存儲所謂上舍入是指當且僅當要舍入的數是一個非零數時對其保留數字部分的最低有效位上的數值加1 并進行必要的進位若一個數是上舍入數其絕對值不會減少如對3.14159265358979 分別進行2 位和12位舍入結果為3.15 和3.141592653590 1、 REAL 數據類型 REAL數據類型可精確到第7 位小數其范圍為從-3.40E -38 到3.40E +38 每個REAL類型的數據占用4 個字節的存儲空間 2、 FLOAT FLOAT數據類型可精確到第15 位小數其范圍為從-1.79E -308 到1.79E +308 每個FLOAT 類型的數據占用8 個字節的存儲空間 FLOAT數據類型可寫為FLOAT[ n ]的形式n 指定FLOAT 數據的精度n 為1到15 之間的整數值當n 取1 到7 時實際上是定義了一個REAL 類型的數據系統用4 個字節存儲它當n 取8 到15 時系統認為其是FLOAT 類型用8 個字節存儲它 3、 DECIMAL DECIMAL數據類型可以提供小數所需要的實際存儲空間但也有一定的限制您可以用2 到17 個字節來存儲從-1038-1 到1038-1 之間的數值可將其寫為DECIMAL[ p [s] ]的形式p 和s 確定了精確的比例和數位其中p 表示可供存儲的值的總位數不包括小數點缺省值為18 s 表示小數點后的位數缺省值為0 例如decimal 15 5表示共有15 位數其中整數10 位小數5 位表4-3 列出了各精確度所需的字節數之間的關系表 DECIMAL數據類型的精度與字節數 精度 字節數 1 ~ 2 2 3 ~ 4 3 5 ~ 7 4 8 ~ 9 5 10 ~ 12 6 13 ~ 14 7 15 ~ 16 8 17 ~ 19 9 20 ~ 21 10 22 ~ 24 11 25 ~ 26 12 27 ~ 28 13 29 ~ 31 14 32 ~ 33 15 34 ~ 36 16 37 ~ 38 17 4、 NUMERIC NUMERIC數據類型與DECIMAL數據類型完全相同 ∀?SQL Server 為了和前端開發工具配合其所支持的數據精度默認最大為28 位但可以通過使用命令來執行sqlservr.exe 程序以啟動SQL Server 可改變默認精度命令語法如下SQLSERVR[/D master_device_path][/P precisim_level]
例4-4 用最大數據精度38 啟動SQL Server sqlservr /d c:\ Mssql2000\data\master.dat /p38 /*在使用了/P 參數后如果其后沒有指定具體的精度數值則默認為38 位/* 三、二進制數據類型 1、 BINARY BINARY 數據類型用于存儲二進制數據其定義形式為BINARY n n 表示數據的長度取值為1 到8000 在使用時必須指定BINARY 類型數據的大小至少應為1 個字節BINARY 類型數據占用n+4 個字節的存儲空間在輸入數據時必須在數據前加上字符0X 作為二進制標識如要輸入abc 則應輸入0xabc 若輸入的數據過長將會截掉其超出部分若輸入的數據位數為奇數則會在起始符號0X 后添加一個0 如上述的0xabc 會被系統自動變為0x0abc 2、 VARBINARY VARBINARY數據類型的定義形式為VARBINARY n 它與BINARY 類型相似n 的取值也為1 到8000 若輸入的數據過長將會截掉其超出部分不同的是VARBINARY數據類型具有變動長度的特性因為VARBINARY數據類型的存儲長度為實際數值長度+4個字節當BINARY數據類型允許NULL 值時將被視為VARBINARY數據類型一般情況下由于BINARY 數據類型長度固定因此它比VARBINARY 類型的處理速度快 四、邏輯數據類型 BIT BIT數據類型占用1 個字節的存儲空間其值為0 或1 如果輸入0 或1 以外的值將被視為1 BIT 類型不能定義為NULL 值所謂NULL 值是指空值或無意義的值 五、 字符數據類型 字符數據類型是使用最多的數據類型它可以用來存儲各種字母數字符號特殊符號一般情況下使用字符類型數據時須在其前后加上單引號’或雙引號” 1、 CHAR CHAR 數據類型的定義形式為CHAR[ n ] 以CHAR 類型存儲的每個字符和符號占一個字節的存儲空間n 表示所有字符所占的存儲空間n 的取值為1 到8000 即可容納8000 個ANSI 字符若不指定n 值則系統默認值為1 若輸入數據的字符數小于n則系統自動在其后添加空格來填滿設定好的空間若輸入的數據過長將會截掉其超出部分 2、 NCHAR NCHAR數據類型的定義形式為NCHAR[ n ] 它與CHAR 類型相似不同的是NCHAR數據類型n 的取值為1 到4000 因為NCHAR 類型采用UNICODE 標準字符集CharacterSet UNICODE 標準規定每個字符占用兩個字節的存儲空間所以它比非UNICODE 標準的數據類型多占用一倍的存儲空間使用UNICODE 標準的好處是因其使用兩個字節做存儲單位其一個存儲單位的容納量就大大增加了可以將全世界的語言文字都囊括在內在一個數據列中就可以同時出現中文英文法文德文等而不會出現編碼沖突 3 、VARCHAR VARCHAR數據類型的定義形式為VARCHAR [ n ] 它與CHAR 類型相似n 的取值也為1 到8000 若輸入的數據過長將會截掉其超出部分不同的是VARCHAR數據類型具有變動長度的特性因為VARCHAR數據類型的存儲長度為實際數值長度若輸入數據的字符數小于n 則系統不會在其后添加空格來填滿設定好的空間 一般情況下由于CHAR 數據類型長度固定因此它比VARCHAR 類型的處理速度 快 4、 NVARCHAR NVARCHAR數據類型的定義形式為NVARCHAR[ n ] 它與VARCHAR 類型相似 不同的是NVARCHAR數據類型采用UNICODE 標準字符集Character Set n 的取值為1 到4000 六、 文本和圖形數據類型 這類數據類型用于存儲大量的字符或二進制數據 1、 TEXT TEXT數據類型用于存儲大量文本數據其容量理論上為1 到231-1 2 147 483 647個字節在實際應用時需要視硬盤的存儲空間而定,SQL Server 2000 以前的版本中數據庫中一個TEXT 對象存儲的實際上是一個指針,它指向一個個以8KB 8192 個字節為單位的數據頁Data Page 這些數據頁是動態增加并被邏輯鏈接起來的在SQL Server 2000 中則將TEXT 和IMAGE 類型的數據直接存放到表的數據行中而不是存放到不同的數據頁中這就減少了用于存儲TEXT 和IMA- GE 類型的空間并相應減少了磁盤處理這類數據的I/O 數量 2、 NTEXT NTEXT數據類型與TEXT 類型相似不同的是NTEXT 類型采用UNICODE 標準字符集Character Set 因此其理論容量為230-1 1 073 741 823 個字節 3、 IMAGE IMAGE數據類型用于存儲大量的二進制數據Binary Data 其理論容量為231-1 2 147 483 647 個字節其存儲數據的模式與TEXT 數據類型相同它通常用來存儲圖形等OLE Object Linking and Embedding 對象連接和嵌入對象在輸入數據時同BINARY數據類型一樣必須在數據前加上字符0X 作為二進制標識 七、 日期和時間數據類型 1、 DATETIME DATETIME 數據類型用于存儲日期和時間的結合體它可以存儲從公元1753 年1 月1 日零時起到公元9999 年12 月31 日23 時59 分59 秒之間的所有日期和時間其精確度可達三百分之一秒即3.33 毫秒DATETIME 數據類型所占用的存儲空間為8 個字節其中前4 個字節用于存儲1900 年1 月1 日以前或以后的天數數值分正負正數表示在此日期之后的日期負數表示在此日期之前的日期后4 個字節用于存儲從此日零時起所指定的時間經過的毫秒數如果在輸入數據時省略了時間部分則系統將12:00:00:000AM 作為時間缺省值如果省略了日期部分則系統將1900 年1 月1 日作為日期缺省值 2、 SMALLDATETIME SMALLDATETIME 數據類型與DATETIME 數據類型相似但其日期時間范圍較小,為從1900 年1 月1 日到2079 年6 月6 日精度較低只能精確到分鐘其分鐘個位上為根據秒數四舍五入的值即以30 秒為界四舍五入如DATETIME 時間為14:38:30.283時SMALLDATETIME 認為是14:39:00 SMALLDATETIME 數據類型使用4 個字節存儲數據其中前2 個字節存儲從基礎日期1900 年1 月1 日以來的天數后兩個字節存儲 此日零時起所指定的時間經過的分鐘數下面介紹日期和時間的輸入格式 日期輸入格式 日期的輸入格式很多大致可分為三類 英文+數字格式 此類格式中月份可用英文全名或縮寫且不區分大小寫年和月日之間可不用逗號年份可為4 位或2 位當其為兩位時若值小于50 則視為20xx 年若大于或等于50 則視為19xx 年若日部分省略則視為當月的1 號以下格式均為正確的日期格式 June 21 2000 Oct 1 1999 January 2000 2000 February 2000 May 1 2000 1 Sep 99 June July 00 數字+分隔符格式 允許把斜杠/ 連接符- 和小數點. 作為用數字表示的年月日之間的分隔符如 YMD 2000/6/22 2000-6-22 2000.6.22 MDY 3/5/2000 3-5-2000 3.5.2000 DMY 31/12/1999 31-12-1999 31.12.2000 純數字格式 純數字格式是以連續的4 位6 位或8 位數字來表示日期如果輸入的是6 位或8 位數字系統將按年月日來識別即YMD 格式并且月和日都是用兩位數字來表示,如果輸入的數字是4 位數系統認為這4 位數代表年份其月份和日缺省為此年度的1 月 1 日如 20000601 2000 年6 月1 日991212 1999 年12 月12 日1998 1998 年 時間輸入格式 在輸入時間時必須按小時分鐘秒毫秒的順序來輸入在其間用冒號隔開但可將毫秒部分用小數點. 分隔其后第一位數字代表十分之一秒第二位數字代表百分之一秒第三位數字代表千分之一秒當使用12 小時制時用AM am 和PM pm 分別指定時間是午前或午后若不指定系統默認為AM AM 與PM 均不區分大小寫如 3:5:7.2pm 下午3 時5 分7 秒200 毫秒 10:23:5.123Am 上午10 時23 分5 秒123 毫秒 可以使用SET DATEFORMAT 命令來設定系統默認的日期-時間格式 八、 貨幣數據類型 貨幣數據類型用于存儲貨幣值在使用貨幣數據類型時應在數據前加上貨幣符號,系統才能辨識其為哪國的貨幣如果不加貨幣符號則默認為各貨幣符號如圖4-2所示 1、 MONEY MONEY 數據類型的數據是一個有4 位小數的DECIMAL 值其取值從–263 -922 337 203 685 477.5808 到263 – 1 +922 337 203 685 477.5807 數據精度為萬分之一貨幣單位MONEY 數據類型使用8 個字節存儲 2、 SMALLMONEY SMALLMONEY 數據類型類似于MONEY 類型但其存儲的貨幣值范圍比MONEY數據類型小其取值從-214,748.3648 到+214,748.3647 存儲空間為4 個字節 九、 特定數據類型 SQL Server 中包含了一些用于數據存儲的特殊數據類型 1、 TIMESTAMP TIMESTAMP數據類型提供數據庫范圍內的惟一值此類型相當于BINARY 8 或圖4-2 貨幣符號一覽 VARBINARY 8 但當它所定義的列在更新或插入數據行時此列的值會被自動更新,一個計數值將自動地添加到此TIMESTAMP數據列中每個數據庫表中只能有一個TIMESTAMP,數據列如果建立一個名為TIMESTAMP 的列則該列的類型將被自動設為TIMESTAMP數據類型 2、 UNIQUEIDENTIFIER UNIQUEIDENTIFIER 數據類型存儲一個16 位的二進制數字此數字稱為GUID Globally Unique Identifier 即全球惟一鑒別號此數字由SQL Server 的NEWID函數產生的全球惟一的編碼,在全球各地的計算機經由此函數產生的數字不會相同 十、 用戶自定義數據類型 SYSNAME SYSNAME 數據類型是系統提供給用戶的便于用戶自定義數據類型,它被定義為NVARCHAR 128 即它可存儲128 個UNICODE 字符或256 個一般字符,其具體使用方法請參見第7 章管理數據庫表中的自定義數據類型章節 十一、 新數據類型 SQL Server 2000 中增加了3 種數據類型BIGINT SQL_VARIANT 和TABLE 其中BIGINT 數據類型已在整數類型中介紹下面介紹其余兩種 1、 SQL_VARIANT SQL_VARIANT 數據類型可以存儲除文本圖形數據TEXT NTEXT IMAGE和TIMESTAMP 類型數據外的其它任何合法的SQL Server 數據此數據類型大大方便了 SQL Server 的開發工作 2 、TABLE TABLE 數據類型用于存儲對表或視圖處理后的結果集這一新類型使得變量可以存儲一個表從而使函數或過程返回查詢結果更加方便快捷
|