1. 程式人生 > >MySQL中的UUID外部取值時錯誤

MySQL中的UUID外部取值時錯誤

  • 在 MySQL 中,可以有如下幾種途徑實現唯一值:

    • 自增序列
    • UUID() 函式
    • 程式自定義

    MySQL 實現了 UUID,並且提供 UUID() 函式方便使用者生成 UUID。

 SELECT UUID()
===>  3525f31e-6bbb-423b-92f5-9ef63110c2f7

在上面 MySQL 的 UUID() 函式生成中,針對UUID產生的值組成部分,分別如下:

  1. 前三組數字從時間戳中生成
  2. 第四組數字暫時保持時間戳的唯一性
  3. 第五組數字是一個 IEEE 802 節點標點值,保證空間唯一。使用 UUID() 函式,可以生成時間、空間上都獨一無二的值
  • 在外部Java Spring通過SQL語句來查詢資料庫時,得到的表字段屬性是UUID的值和資料裡面的值不一樣,這裡只需要在java類中加上 @Type(type = “uuid-char”)屬性,實際程式碼如下:
@Entity
@Table(name = "roles")
public class RoleDto implements Serializable {
  private UUID id;
  private String code;
  private String name;
  private int status;
  private UUID tenantId;


  @Id
@Type(type = "uuid-char") @GeneratedValue public UUID getId() { return id; } public void setId(UUID id) { this.id = id; } @Basic @Column(name = "code") public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Basic
@Column(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Basic @Column(name = "status") public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } @Basic @Type(type = "uuid-char") @Column(name = "tenant_id") public UUID getTenantId() { return tenantId; } public void setTenantId(UUID tenantId) { this.tenantId = tenantId; }

最後資料庫中的UUID值和外部得到的UUID 不相同的問題就完美解決了