1

使用 Oracle ascii 函数时:

select ascii('A') from dual;

它返回 65 是正确的。

但是,当我使用:

select ascii('周') from dual;

返回是55004。ascii可以表示>255???

如何解释?

帮助!!!!

我的oracle版本:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production my Characterset:6 NLS_CHARACTERSET ZHS16GBK

4

2 回答 2

4

ASCII在名称中是 Oracle 仅支持 ASCII 时的保留。这并不意味着它只返回 ASCII 值。

从文档:

ASCII 返回 char 的第一个字符在数据库字符集中的十进制表示。

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions013.htm#sthref933

所以结果取决于数据库字符集,可以大于 255。

于 2013-08-28T04:02:20.747 回答
1

这可能会因您的 Oracle 版本而异,但它可能试图帮助您优雅地处理您正在传递的非 7 位 ASCII 值(但不应该如此)。至少一个版本中的文档讨论了对非 ASCII 输入 ( http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions007.htm ) 的一些处理,但如果您使用的是不同版本的 oracle您可能需要参考相应的文档。

如果您的文档没有进一步说明它如何处理非 7 位字符,那么答案可能没有明确定义(即 Oracle 不能保证行为),您可能需要考虑清理您的输入,因此您只尝试调用 ASCII对您知道在正确输入集中的值起作用。

于 2013-08-28T04:06:18.773 回答