php 用户注册表设计,用户ID类型GUID

1,用户表用户id的问题。我大多数情况下采用的都是自增的int型id,这样储存空间占用小。但是存在一个缺陷,就是int最大是11位数容易超出。还有一个弊端就是数据迁移的时候,比如用户注册在两台机器上,两个自增的ID,合并的时候只能把一个表的数据放另外一个的后面,这样引起用户混乱,还有就是拆分的时候,也容易出现诸如此类的问题。

解决方案:所用用户注册在一个数据库,需要分库的时候,只有拆分操作。

2,为了避免数据可能出现的拆分问题,还有一种方式是md5加密一个字符串,拼接一个衍值,这个值通常是用时间戳和rand随机数。但是这会有个缺陷,就是同一时间注册的两个用户,随机数也可能一样,导致用户混淆,但是这个概率非常小。

3,GUID 是全局唯一标示符,理想情况下是全球唯一的,代码如下:

<?php
function create_guid(){
  $charid = strtoupper(md5(uniqid(mt_rand(),true)));
  $hypen = chr(45);
  $uuid = substr($charid,6,2).substr($charid,4,2).
  substr($charid,2,2).substr($charid,0,2).$hypen.
  substr($charid,10,2).substr($charid,0,2).$hypen
  .substr($charid,14,2).substr($charid,12,2).$hypen
  .substr($charid, 16,4).$hypen.substr($charid, 20,12);
  return $uuid;
}
$uid = create_guid();
var_dump($uid);

以上情况记录一下,具体使用哪一种方式?根据不同的项目需求选择吧。

原文地址:https://www.cnblogs.com/ayanboke/p/9728430.html