2016-11-04 10 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でエンコードされてOracleに送られ、 'varchar2 'はUTF-16でエンコードできないということは、可能です(ほぼ確実です)。しかし、それは同じアプリケーションから一貫しているはずです。同じアプリケーションを複数回実行して別の結果を得ていることはほとんどありません。 –

答えて

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()両方の値を追加すると思います。多分問題はいくつかの空白である。

関連する問題