2017-06-19 69 views
0

我有一個Oracle 12c數據庫,它將替換£??INSERT。該插入來自11.2即時客戶端SQL * Plus會話。兩個盒子都在運行Linux。Oracle用英鎊代替英鎊INSERT

從DB主機本身的SQL * Plus也會發生同樣的情況。

數據庫主機具有以下設置:

  • $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 

編輯:修正。只有£正在被替換,但正在替換爲??

+0

它實際上是在表中被替換,還是在查詢時出現?查看'dump()'函數來查看實際存儲的內容。插入和查詢會話的'NLS_LANG'是什麼? –

+0

另外檢查源代碼是否是你認爲的字符,[不是類似的](http://www.fileformat.info/info/unicode/category/Sc/list.htm)。特別是(顯然)美元符號;如果這是正常的,那麼看不到這會很奇怪。 –

回答

1

您正在看到the Unicode replacement character。它看起來像你的Linux環境設置the Oracle NLS_LANG variable是不恰當的:

$ 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它按預期工作:

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

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

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

這是the Unicode pound sign