代码之家  ›  专栏  ›  技术社区  ›  Jay

ColdFusion-Oracle guid奇数

  •  3
  • Jay  · 技术社区  · 15 年前

    我在ColdFusion 7中看到了一个有趣的结果,它试图将其用作sys_guid()值。

    如果我这样做

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

    coldfusion将返回的guid值视为二进制字段。

    但是,如果我这样做的话

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

    返回的guid值被视为字符串。

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

    1 回复  |  直到 15 年前
        1
  •  6
  •   yfeldblum    15 年前

    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需要字符串值的地方,它将执行此转换。