字元數字類型:
- char、varchar、long varchar
- nchar、nvarchar、long nvarchar
- 通過域實現相容sqlserver的資料類型:sysname(varchar(30))、text(long varchar域)、ntext(long nvarchar域)、xml(long varchar域)、uniqueidentifierstr(char(36)的域:映射為sqlserver的uniqueidentifier列)
sybase和sqlserver不同,所有字元資料類型的儲存結構是相同的。預設情況下:在一段中儲存不超過128個位元組的值;如果超過128個位元組的值的完整值儲存在其他頁面上,本地僅僅儲存4個位元組的指向完整值的地址。預設值由create table語句的inline和prefix字句控制。
sybase和sqlserver不同,字元資料類型的長度區分位元組長度和字元長度,預設為位元組長度。
sybase和sqlserver不同,char類型在行為上是和varchar相同的。sql anywhere不會用空白輸入鍵台資料
當用戶端程式對字元資料類型的列執行describe時,視所用的程式介面不同,使用字元長度語義定義可能會影響返回的值。
數字資料類型:
- bigint、bit、decimal、int、integer、numeric、smallint、tinyint
- double、float(p)、real
- 通過域實現相容sqlserver的資料類型:money(numeric(19,4))、smallmoney(numeric(10,4))
必須注意:精度、小數位元、數字個數問題
sybase預設bit類型不允許為空白,而sqlserver則無此限制
sybase規定除了bit以外的整數類型可以有unsigned修飾,而sqlserver則無此修飾
位元組資料類型:只能儲存0和1組成的資料:整數的二進位表示
- varbit、bit varying、long varbit、long bit varying
位元據類型:逐位元組比較、不進行字元集轉換
binary、long binary、varbinary、binary varying、uniqueidentifier(又稱uuid或guid)
通過域實現相容sqlserver的資料類型:image(long binary)
sybase的位元據和sqlserver的位元據類型最大長度大小不同:為32767而不是80000
sybase的binary雖然類型和varbinary不同,但sybase總是那它當做varbinary處理
日期和時間類型:
- date、time、timestamp
- 通過域實現相容sqlserver的資料類型:datetime(timestamp)、smalldatetime(timestamp)
sybase的日期和時間類型和sqlserver的有很大不同,sqlserver有datetime、smalldatetime兩種類型且 能表示的範圍和精度較小。
sqlserver中的timestamp類型為一表示行版本的二進位串,和sybase的timestamp日期時間類型根本不同
sybase中,無論:介面如何,是否是odbc格式,是否是嵌入sql的格式,是否指定了date_order,“yyyy-mm-dd”、“yyyy/mm/dd”格式總是可以正確解析為日期;“hh:mm:ss:ssss”將明確的解釋為時間;二者的組合總能產生明確的日期時間;“yyyy-mm-dd hh.mm.ss.sss”也可以產生明確的日期時間,時間中的句點號僅僅能用在和日期組合的情況下!!
域:使用者自訂資料類型:內建資料類型的別名,包括:精度、小數位元、default值、check約束、為null性。
域的存在,有利於整個資料庫的一致性,並可以消除一些類型錯誤
sybase的域的定義和使用及功能及要求和sqlserver的完全一樣
資料類型轉換:
- cast、convert顯示轉換;類型函數如date、string、數字類型+0.0;隱式轉換
- 字元集轉換的丟失和字元替換問題
- java資料類型和sql資料類型依照 jdbc標準執行轉換
- 不同資料類型的轉換需要認真研讀、實踐,sybase和sqlserver以及不同的rdbms系統均不會完全相同