为什么Oracle ascii函数返回> 255代码?

时间:2013-08-28 03:45:43

标签: oracle select ascii

使用Oracle ascii函数时:

select ascii('A') from dual;

返回65是对的。

但是,当我使用时:

select ascii('周') from dual;

返回值为55004.ascii可以表示> 255 ???

如何解释?

帮助!

我的oracle版本:Oracle Database 11g企业版11.1.0.6.0版 - 生产版 my Characterset:6 NLS_CHARACTERSET ZHS16GBK

2 个答案:

答案 0 :(得分:4)

名称中的

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

来自文档:

  

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

     

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

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

答案 1 :(得分:1)

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

如果您的文档没有详细说明它如何处理非7位字符,那么答案可能没有明确定义(即Oracle无法保证行为)并且您可能需要考虑清理输入以便您只尝试在你知道在正确输入集中的值上调用ASCII函数。