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. }






  • 相关阅读:
    windows下Qt5.1.0配置android环境搭建 good
    Qt Focus事件,FocusInEvent()与FocusOutEvent()
    Python框架之Django
    WITH (NOLOCK)浅析
    区域、模板页与WebAPI初步
    对象映射工具AutoMapper介绍
    .NET大型B2C开源项目nopcommerce解析——项目结构
    企业管理系统集成
    oracle中sql语句的优化
    C#可扩展编程之MEF
  • 原文地址:https://www.cnblogs.com/chengkeke/p/5417341.html
Copyright © 2011-2022 走看看