我看到一个有趣的结果试图在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,并且工作正常。我希望有人可以解释为什么我会得到这些结果。
答案 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期望字符串值的位置放置二进制值,它将执行此转换。