-
什么是GUID?
GUID: 即Globally Unique Identifier(全球唯一标识符) ,GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。 简单的计算方法 网卡mac地址+CPU当前时钟 按照指定算法计算。(来自百度百科)
-
使用GUID作为主键的好处及缺点。
优点:绝对不会重复,在数据合并、数据迁移时不会出现主键冲突的问题,对于大型系统,可能需要进行数据迁移的系统,建议使用GUID。便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而 GUID列则无需任何处理,直接用 T-SQL 加载即可。
缺点1:
可读性差,比如说你需要在后台修改一个商品,你如果自增长字段那么你只需在前台找出ID,比如1,再到后台找到这记录手动修改就好了,而你使用GUID,那么你想想拿这么一大串字符去找数据什么情形 ?
缺点2:存储空间增大;索引时间较慢所以大数据量查询时对性能影响较大。在博客园某位博主10W数据量测试下,比int的主键慢1S左右,增加索引列可减小性能影响。
-
MSSQL获取GUID
如果在 SQL Server 的表定义中将列类型指定为 uniqueidentifier,则列的值就为 GUID 类型。使用NewID() 函数可以产生 GUID 唯一值。
不过阿布建议你这列适用varchar类型,生成GUID后转成varchar类型,并去除中间的“-” 方便以后判断及处理。
-
ORACLE获取GUID的函数
在Oracle中可以用SYS_GUID()来生成一个guid,相当于msSql中的newid()。在Oracle9i和Oracle 10g 里SYS_GUID产生得到的数据是32 位的。
-
DB2获取GUID的函数
DB2中,没有产生GUID的函数。
想使用GUID有两种方法:
1:替代函数generate_unique,返回的数据类型为CHAR FOR BIT,长度为13。
2:程序中产生GUID然后再存储到数据库。后续我将介绍程序中产生GUID的方法。
-
MYSQL获取GUID的函数
mysql好像不支持GUID的自动生成,也可以使用字符字段存储,程序生成GUID的方式。
-
C#中生成GUID
System.Guid.NewGuid().ToString();
-
VB.NET中生成GUID
Module BuilderExamples
Sub Main()
GenerateGUID()
End Sub
Public Sub GenerateGUID()
Console.WriteLine(“GUID: ” + System.Guid.NewGuid().ToString())
End Sub
End Module
-
java中生成GUID
private void getRandomGUID(boolean secure)
{
MessageDigest md5 = null;
StringBuffer sbValueBeforeMD5 = new StringBuffer(128);try
{
md5 = MessageDigest.getInstance(“MD5″);
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}try
{
long time = System.currentTimeMillis();
long rand = secure ? mySecureRand.nextLong() : myRand.nextLong();
sbValueBeforeMD5.append(s_id);
sbValueBeforeMD5.append(“:”);
sbValueBeforeMD5.append(Long.toString(time));
sbValueBeforeMD5.append(“:”);
sbValueBeforeMD5.append(Long.toString(rand));valueBeforeMD5 = sbValueBeforeMD5.toString();
md5.update(valueBeforeMD5.getBytes());byte[] array = md5.digest();
StringBuffer sb = new StringBuffer(32);
for (int j = 0; j < array.length; ++j)
{
int b = array[j] & TWO_BYTES;
if (b < PAD_BELOW)
{
sb.append(’0′);
}
sb.append(Integer.toHexString(b));
}valueAfterMD5 = sb.toString();
}
catch (Exception e)
{
e.printStackTrace();
}
}
-
C++中生成GUID
CString get_strGUID()
{
GUID m_guid;
CString strGUID;
if (S_OK ==::CoCreateGuid(&m_guid))
{
strGUID.Format(“%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X” ,
m_guid.Data1, m_guid.Data2, m_guid.Data3 ,
m_guid.Data4[0], m_guid.Data4[1],
m_guid.Data4[2], m_guid.Data4[3],
m_guid.Data4[4], m_guid.Data4[5],
m_guid.Data4[6], m_guid.Data4[7] );
}
return strGUID;
}
-
PHP中生成GUID
function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// “-”
$uuid = chr(123)// “{”
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// “}”
return $uuid;
}