Mysql UUID作为实体id

Mysql UUID作为实体id,mysql,hibernate,Mysql,Hibernate,我在java应用程序中使用hibernate+mysql,我想在向表中插入条目时生成一个唯一的字符串id(UUID) 如何创建一个表,以便自动生成uuid并将其用作实体键 +------------+-------------------------------------+ | uuid | name | +------------+-------------------------------------+ | asd

我在java应用程序中使用hibernate+mysql,我想在向表中插入条目时生成一个唯一的字符串id(UUID)

如何创建一个表,以便自动生成uuid并将其用作实体键

+------------+-------------------------------------+
| uuid       | name                                |
+------------+-------------------------------------+
| asdf1221   | name 1                              |
| sksdkfk1   | name 2                              |
+------------+-------------------------------------+

MySQL不允许为默认值使用函数,但请参阅以了解如何创建触发器来实现此目的


请注意,MySQL的
UUID()
返回一个
CHAR(36)
,将UUID存储为文本(如这些答案所示)显然效率低下。相反,列应该是
BINARY(16)
,插入数据时可以使用
UUID\u TO\u BIN()
,读回数据时可以使用
BIN\u TO\u UUID()

  • randomUuid()是类型4,加密性很强;MySQL uuid()属于类型1,它基于时间,相对容易预测
  • 如果您关心安全性,请使用Java进行

  • 正如Stephen所提到的,二进制(16)在数据库中存储uuid时效率更高

  • Hibernate通过协调数据库二进制文件(16)和JavaUUID,获得了本机支持。只需在Java实体中将字段类型设置为UUID,列定义为二进制(16)。

    使用
    create table
    SQL查询?到底是什么问题?ypu对uuid意味着什么?uuid是自动增量还是自动增量