首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中将UUID保存为二进制(16)

问如何在java中将UUID保存为二进制(16)
EN

Stack Overflow用户
提问于 2016-10-28 03:26:53
回答 1查看 13.3K关注 0票数 6

我有一个表TestTable,列ID为二进制(16),名称为varchar(50)

我一直试图将订购的UUID存储为PK,如本文以优化方式存储UUID中所示

我看到UUID保存在数据库中作为HEX (blob)

所以我想从java保存这个ID,但是我得到了这个错误

数据截断:数据太长,无法在第1行的列'ID‘

我目前正在使用库sql2o与mysql进行交互。

所以基本上这是我的代码

代码语言:javascript
复制
String suuid = UUID.randomUUID().toString();
String partial_id = suuid.substring(14,18) + suuid.substring(9, 13) + suuid.substring(0, 8) + suuid.substring(19, 23) + suuid.substring(24)
String final_id = String.format("%040x", new BigInteger(1, partial_id.getBytes()));
con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
        .addParameter("id", final_id)
        .addParameter("name", "test1").executeUpdate();

部分id应该类似于这个11d8eebc58e0a7d796690800200c9a66

我在mysql中尝试了这个语句,没有问题。

代码语言:javascript
复制
insert into testtable(id, name) values(UNHEX(CONCAT(SUBSTR(uuid(), 15, 4),SUBSTR(uuid(), 10, 4),SUBSTR(uuid(), 1, 8),SUBSTR(uuid(), 20, 4),SUBSTR(uuid(), 25))), 'Test2');

但是当我移除解十六进制函数时,我得到了同样的错误。那么,如何将正确的ID从Java发送到mysql呢?

更新

我从戴维·埃尔曼的回答中解决了我的问题。但在我的示例中,我使用tomcat的HexUtils将已排序的UUID字符串转换为bytes[]:

代码语言:javascript
复制
byte[] final_id = HexUtils.fromHexString(partial_id);
EN

Stack Overflow用户

回答已采纳

发布于 2016-10-28 03:35:31

尝试将其存储为字节:

代码语言:javascript
复制
UUID uuid = UUID.randomUUID();
byte[] uuidBytes = new byte[16];
ByteBuffer.wrap(uuidBytes)
        .order(ByteOrder.BIG_ENDIAN)
        .putLong(uuid.getMostSignificantBits())
        .putLong(uuid.getLeastSignificantBits());

con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
    .addParameter("id", uuidBytes)
    .addParameter("name", "test1").executeUpdate();

有一点解释:您的表使用二进制(16),因此将UUID序列化为其原始字节是一种非常简单的方法。UUID本质上是128位int,有几个保留位,所以这段代码将其写成一个大端128位int。ByteBuffer只是将两个longs转换成一个字节数组的简单方法。

现在,在实践中,所有的转换工作和头痛将不值得您节省每一行20个字节。

票数 12
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40297600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档