Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como salvar um UUID como binário (16) em java


Tente armazená-lo como bytes:
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();

Uma pequena explicação:sua tabela está usando BINARY(16), então serializar UUID como seus bytes brutos é uma abordagem realmente direta. UUIDs são essencialmente ints de 128 bits com alguns bits reservados, então esse código escreve como um int big-endian de 128 bits. O ByteBuffer é apenas uma maneira fácil de transformar dois longos em uma matriz de bytes.

Agora, na prática, todo o esforço de conversão e dores de cabeça não valerão os 20 bytes que você economiza por linha.