2013-08-28 44 views
1

使用Oracle ASCII功能:为什么oracle ascii函数返回大于255的代码?

select ascii('A') from dual; 

它回到65是正确的。

但是,当我使用:

select ascii('周') from dual; 

返回是55004.The ASCII可以代表> 255 ???

如何解释?

帮助!!!!

我的Oracle版本:Oracle数据库11g企业版发布11.1.0.6.0 - 生产 我CHARACTERSET:6 NLS_CHARACTERSET ZHS16GBK

+0

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions014.htm – dcaswell

回答

4

在名称ASCII是当Oracle只支持ASCII缓缴。这并不意味着它只返回ASCII值。

从文档:

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

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

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

+2

+1。下一个问题:Oracle认为“十进制表示”这个术语的含义是什么? :-P – ruakh

+0

@ruakh lol :)我想他们用“decimal”作为“numeric”的同义词。请注意,它确实会返回一个'NUMBER',它在Oracle内部以十进制格式存储,类似... –

+0

@ruakh - 我知道你在开玩笑,但我认为他们的意思是十进制,与十六进制或八进制表示/符号相反(而不是[数学含义](https://en.wikipedia.org/wiki/Decimal_representation))。 –

1

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

如果您的文档没有更多地说明它如何处理非7位字符,那么答案可能没有很好地定义(即不保证Oracle的行为),您可能需要考虑清理输入,以便您只请尝试在您知道属于正确输入集的值上调用ASCII函数。