【发布时间】:2019-05-09 16:55:18
【问题描述】:
我的查询:
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 数据库。
有什么想法吗?
谢谢!
【问题讨论】:
-
asciistr 结果为十六进制; base-16 中的 92 是 base-10 中的 146,所以匹配。您的 client 字符集是什么 - 例如如果您使用的是 SQL*Plus(我猜是 US7ASCII),则来自您的 NLS_LANG 设置;和你的操作系统/外壳/仿真器编码?这看起来像是客户端渲染问题,而不是数据或数据库问题。
-
您使用哪个工具来运行 select 语句?
标签: database oracle character-set