oracle與sybase的差異為:1、SQL語法不一致,2、欄位超長後處理機制不同,Sybase處理機制為自動截斷,Oracle在輸入超長字元時因無自動截斷機制,3 、中文字段位元組長度不一致,Sybase資料庫1個中文佔2個字節,Oracle資料庫1個中文佔3個字節,4、字元類型轉換,5、空值讀取結果不一致,6、查詢語句輸出預設排序不一致,7、日期格式不一致。
本教學作業系統:Windows10系統、Dell G3電腦。
oracle與sybase的差異是:
(一)SQL語法不一致
1、字串處理函數不同:例如Sybase為substring( ),oracle為substr();取系統時間Oracle為sysdate,Sybase為getdate()。
2、多表聯結語法不一樣。
(二)欄位超長後處理機制不同
超過資料庫定義欄位長度的輸入,Sybase處理機制為自動截斷,輸入超長字元時交易成功;Oracle在輸入超長字元時因無自動截斷機制,則交易報錯無法成功。這種不同的超長字元輸入處理機制導致大量歷史異常資料在Sybase成功,在Oracle交易失敗。超長欄位輸入來源包括:(1)主機向系統資料庫的輸入資料;(2)系統本身頁面前端未控製字元長度,輸入超長的資料;(3)系統本身程式有超長函數名稱,存入日誌表報錯;(4)關聯繫統輸入超長欄位。此差異引發的問題是本次遷移涉及範圍最廣的問題,涉及改造交易上百個。後針對字段超長的問題,項目討論後決定重新梳理交易相關字段,補充測試用例,進行專項測試,針對重要外部系統輸入的字段逐項對比排查。
(三)中文欄位位元組長度不一致
Sybase資料庫1個中文佔2個位元組;Oracle資料庫1個中文佔3個位元組,如部分輸入欄位在資料庫遷移前後未對中文欄位長度進行擴充,則會出現實際業務不一致的情況。例如:在系統的某個輸入頁面,第一版測試時,開發未對自訂備註(可輸入中文)進行欄位長度的擴充,導致自訂備註在資料庫遷移前後內容由於超長被覆蓋而導致不一致。需重點梳理業務欄位及支援輸入類型(是否含中文)。
(四)字元類型轉換
Sybase和Oracle對於不同字元類別的處理機制不同;以char字元類型處理機制為例,Sybase中歷史資料中有長度為1的數據'6',遷移到oracle後,取值時為會自動補空格變成'6',導致程式邏輯出錯。剛開始開發人員在程式中透過trim過濾空格,後來統一將char類型修改為varchar類型。
(五)空值讀取結果不一致
Sybase和Oracle對於空值的處理機制不同,例如:對於0長度的空值'',Sybase儲存為長度為1的空格:'',後續查詢該字段封包時,該字段為長度為1的空格;Oracle則存儲為null,後續查詢該字段拼報文時,該字段取出為NULL,會少1個字段。
(六)查詢語句輸出預設排序不一致
例如:明細類別交易,兩個資料庫輸出順序不一致;同時待處理任務輸出順序也不一致。
(七)日期格式不一致
Sybase與Oracle日期處理格式不一致。例如:Oracledatetime格式為to_date(‘2020-05-1012:00:00','yyyy-mm-ddHH24:mi:ss'),Sybasedatetime格式為‘05/10/202012:00:00AM'。
以上是oracle與sybase的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!