close

  今天一早就收到系統寄來的錯誤訊息通知,一看之下,那不是我上週才上線的嗎?而且錯誤訊息是PK重覆,怎麼可能會發生這樣嚴重的程式撰寫錯誤,第一個直覺就是查看資料庫裡的資料,這程式會同時連往Oracle及MS SQL2005兩種不同的資料庫,進行資料的維護更新,看啊看到,發現資料庫裡的資料"不乾淨",資料的後面跟了空白字串,例如 : "TEST  ",正常來說,資料庫裡的資料應該都是Trim過才放進去的,怎麼會有這樣的資料存在.


  這資料是問題之一,但最後發現一個更怪的情況,同一樣SQL語法,Oracle與MS SQL會有不同的結果,但我個人覺得,Oracle才是合理的結果,MS SQL(SQL 2005)是不對的,以Oracle來說 'TEST' <> 'TEST   ',但MS SQL就神奇了,'TEST' = 'TEST  ',它自動幫我Trim,這法範例如下 :


EX1:


select * from testTB where UsrName='TEST'


這個Oracle與MS SQL回傳的結果一樣


EX2:


select * from testTB where UsrName='TEST  '


Oracle會因為TEST後面多了空白字串,而找不到資料.


MS SQL因為它會自動Trim,結果會同EX1.


 


因為這樣的結果,才導致我PK重覆的錯誤.本來很想再查下去,可是沒權限去碰資料庫,只好放棄,只能說,學到經驗了,下次對MS SQL要注意這種問題.

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jeffyeh 的頭像
    jeffyeh

    jeffyeh

    jeffyeh 發表在 痞客邦 留言(2) 人氣()