2017-06-19 72 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