2017-06-19 8 views
0

私は£の代わりに??INSERTのOracle 12cデータベースを持っています。インサートは、11.2インスタント・クライアントSQL * Plusセッションからのものです。どちらのボックスもLinuxを実行しています。オラクルは£を? on INSERT

DBホスト自体のSQL * Plusでも同じことが起こります。

DBホストは、次の設定があります。

  • $LANG:en_GB.UTF8
  • NLS_CHARACTERSET:AL32UTF8

は、クライアントがあります。

  • $LANG:en_GB.UTFを-8

$NLS_LANGは、DBホストまたはクライアントホストのいずれにも設定されていません。

select dump('£', 1017) from dual; 

DUMP('??',1017) 
----------------------------------------------------- 
Typ=96 Len=6 CharacterSet=AL32UTF8: ef,bf,bd,ef,bf,bd 

EDIT:修正。 £のみが置き換えられますが、??

+0

テーブルで実際に置き換えられるのですか、それともクエリすると表示されますか?実際に何が格納されているかを見るには 'dump()'関数を調べてください。挿入して照会するセッションの 'NLS_LANG'とは何ですか? –

+0

また、ソースが実際にあなたが思うキャラクターであることを確認してください。[類似のものではありません](http://www.fileformat.info/info/unicode/category/Sc/list.htm)。特に(明らかに)ドル記号;それが正常であればそれは奇妙に見えません。 –

答えて

1

あなたはthe Unicode replacement characterが表示されています。それはthe Oracle NLS_LANG variableの設定お使いのLinux環境のように見えることは適切ではありません。一致した設定で

$ export NLS_LANG="ENGLISH_UNITED KINGDOM.US7ASCII" 
$ sqlplus ... 

SQL> select dump('£', 1017) from dual; 

DUMP('??',1017) 
----------------------------------------------------- 
Typ=96 Len=6 CharacterSet=AL32UTF8: ef,bf,bd,ef,bf,bd 

あなたLANGそれが期待どおりに動作:the Unicode pound signある

$ export NLS_LANG="ENGLISH_UNITED KINGDOM.AL32UTF8" 
$ sqlplus ... 

SQL> select dump('£', 1017) from dual; 

DUMP('£',1017) 
----------------------------------------- 
Typ=96 Len=2 CharacterSet=AL32UTF8: c2,a3