coldfusion - oracle guid奇怪

Jay*_*Jay 3 oracle coldfusion

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

如果我做

<cfquery>select sys_guid() as guid from dual</cfquery>
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我这样做

<cfquery>select sys_guid() || '' as guid from dual</cfquery>
Run Code Online (Sandbox Code Playgroud)

返回guid值被视为字符串.

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

yfe*_*lum 6

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

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