2016-11-04 19 views
0

我在表中定義爲Varchar2(4000)的列名爲tbl_varchar。 我從客戶端獲得一個輸入參數,也是一個varchar2(4000)的存儲過程。我稱之爲input_varchar在Oracle中使用不同的字符集比較varchar2?

我只想更新內容是否發生了變化:

Update table t SET tbl_varchar = input_varchar, updated = sysdate 
WHERE key = input_key and tbl_varchar != input_varchar; 

我用相同的輸入多次運行此,看到我的時間戳更新,每次但VARCHAR數據似乎並沒有被更改。

這可以與客戶端和數據庫上的不同字符集有什麼關係嗎?如果是這樣,確認它的最好方法是什麼?我沒有任何客戶的控制權。

+0

根據定義,'varchar2'列必須是相同的字符集。有可能(幾乎可以肯定),Java中的字符集轉換髮生在字符串被UTF-16編碼爲「varchar2」不能被UTF-16編碼的Oracle。但是,這應該是相同的應用程序一致。您在同一臺計算機上多次運行相同的應用程序並獲得不同結果的可能性非常小。 –

回答

0

如果這是對字符集,你可以嘗試:

Update table t SET tbl_varchar = input_varchar, updated = sysdate 
WHERE key = input_key and convert(tbl_varchar, 'US7ASCII') != convert(input_varchar, 'US7ASCII'); 

或者把你的字符集,而不是'US7ASCII'

我也想補充trim()兩個值。也許問題在於一些空格。

相關問題