我的查询:
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数据库。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
很可能您没有设置NLS_LANG
值,Oracle将其默认设置为AMERICAN_AMERICA.US7ASCII
。
SQLplus从命令行继承了字符集,您可以使用命令chcp
来查询/更改代码页,然后必须相应地设置NLS_LANG
。
示例:
chcp 1252
set NLS_LANG=.WE8MSWIN1252
sqlplus ...
如果您在Linux上工作,请使用locale charmap
或echo $LANG
来检索终端的编码。
不需要将NLS_LANG
设置为等于数据库字符集,但是您选择的字符集必须支持字符’