Mysql
 sql >> Database >  >> RDS >> Mysql

Come salvare un UUID come binary(16) in java

Prova a salvarlo come byte:

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();

Una piccola spiegazione:la tua tabella sta usando BINARY(16), quindi serializzare UUID come byte grezzi è un approccio davvero semplice. Gli UUID sono essenzialmente int a 128 bit con alcuni bit riservati, quindi questo codice lo scrive come un int big-endian a 128 bit. ByteBuffer è solo un modo semplice per trasformare due long in un array di byte.

Ora, in pratica, tutto lo sforzo di conversione e il mal di testa non varranno i 20 byte che salvi per riga.