选择返回“¿”字符

时间:2018-12-07 22:50:22

标签: database oracle character-set

我的查询:

SELECT op_arv
FROM my_table@OTHER_DB

返回:

d¿identification

“¿”符号不应存在。

如果我随后运行:

SELECT 
 substr(op_arv,2,1) AS t_substr
,ascii(substr(op_arv,2,1)) AS t_ascii
,chr(ascii(substr(op_arv,2,1))) AS t_chr_ascii
,asciistr(substr(op_arv,2,1)) AS asciistr_1
FROM my_table@OTHER_DB

我得到以下输出:

¿
146
¿
\0092

ASCII函数返回146,它与有意义的(撇号)符号相对应。但是,如果我尝试“ CHR()”的实际值,我会得到¿而不是。 CHR(146)给我正确的符号...

运行ASCIISTR函数将返回Unicode值\ 0092,这是一个Unicode控制字符,而不是撇号...

我正在使用NLS_CHARACTERSET = WE8MSWIN1252运行Oracle 11gR2。我正在通过数据库链接连接到运行NLS_CHARACTERSET = WE8ISO8859P1的Oracle数据库。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

很可能您没有设置NLS_LANG值,Oracle将其默认设置为AMERICAN_AMERICA.US7ASCII

SQLplus从命令行继承了字符集,您可以使用命令chcp来查询/更改代码页,然后必须相应地设置NLS_LANG

示例:

chcp 1252
set NLS_LANG=.WE8MSWIN1252
sqlplus ...

如果您在Linux上工作,请使用locale charmapecho $LANG来检索终端的编码。

不需要将NLS_LANG设置为等于数据库字符集,但是您选择的字符集必须支持字符