coldfusion - oracle guid奇怪

时间:2009-12-23 13:55:30

标签: oracle coldfusion

我看到一个有趣的结果试图在Coldfusion 7中用作sys_guid()值。

如果我这样做

<cfquery>select sys_guid() as guid from dual</cfquery>

返回guid值被Coldfusion视为二进制字段。

然而,如果我这样做

<cfquery>select sys_guid() || '' as guid from dual</cfquery>

返回guid值被视为字符串。

我尝试了几种不同的Oracle和Coldfusion / Macromedia驱动程序,它们都响应相同。后面的语句是我一直在使用的,所以我可以稍后在代码中处理guid,并且工作正常。我希望有人可以解释为什么我会得到这些结果。

1 个答案:

答案 0 :(得分:6)

GUID是128位(16字节)二进制值。它们不是字符串。查看sys_guid的Oracle文档。

您的目标是将GUID作为字符串处理。这意味着你需要将GUID值转换为字符串值。只需执行select sys_guid() as guid from dual,就会得到128位二进制值,如预期的那样。当您执行select sys_guid() || '' as guid from dual时,首先Oracle必须先将128位二进制值转换为字符串值才能执行连接,因为连接仅适用于两个字符串值。 Oracle知道如何将二进制值转换为字符串值,如果在Oracle期望字符串值的位置放置二进制值,它将执行此转换。