zoukankan      html  css  js  c++  java
  • GUID(Globally Unique Identifier)全局唯一标识符

            最近有大量数据存入数据库时,因为主键为一个nvarchar类型,起初想着用int 类型,每次打开表的时候,获取最后一行的ID,然后让其++。 但发现由于字段是char类型,数据库对其进行了排序。再次插入数据时,末尾已经不再是最后一次插入的数据了。项目组其他人说,使用GUID,windows留有一个产生GUID的接口,可以产生GUID码,我们之后可以把得到的GUID转为我们使用的vchar。
            下面来介绍一下GUID,GUID中文被称为全局唯一标识符。是一种由算法生成的二进制长度为128位数字,转换为字符为32位字符串。在一个计算机中,基本不可能产生相同的GUID码,因为在其算法中加入了时间因素,以保证重复的情况不会发生。

            GUID码广泛的应用在许多产品中,如注册表,接口标识,数据库、系统目录等。

    GUID组成:
    1. typedef struct _GUID {
    2. unsigned long Data1;
    3. unsigned short Data2;
    4. unsigned short Data3;
    5. unsigned char Data4[ 8 ];
    6. } GUID;
    可以看到GUID定义是一个结构体。

    生成GUID接口,windows API:
    1. ::CoCreateGuid(&guid)

    下面给出具体生成GUID码的代码:
    1. const char* newGUID()
    2. {
    3. static char buf[64] = {0};
    4. GUID guid;
    5. if (S_OK == ::CoCreateGuid(&guid))
    6. {
    7. _snprintf(buf, sizeof(buf)
    8. , "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"
    9. , guid.Data1
    10. , guid.Data2
    11. , guid.Data3
    12. , guid.Data4[0], guid.Data4[1]
    13. , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
    14. , guid.Data4[6], guid.Data4[7]
    15. );
    16. }
    17. return (const char*)buf;
    18. }






  • 相关阅读:
    AN BD FD DD CD UT CT TT IT ST UAT OP
    log4j
    重构代码
    with as sql的优化
    svn locked,并且无法clean up 的解决方法
    去掉Eclipse中没用的workspace
    getHibernateTemplate()的get方法
    Java反射
    windows 右键新建html文档
    fiddler 针对单个接口打断点
  • 原文地址:https://www.cnblogs.com/chengkeke/p/5417341.html
Copyright © 2011-2022 走看看