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

Sådan gemmer du en UUID som binær(16) i java

Prøv at gemme det som 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();

Lidt af en forklaring:din tabel bruger BINARY(16), så serialisering af UUID som dens rå bytes er en virkelig ligetil tilgang. UUID'er er i det væsentlige 128-bit ints med et par reserverede bits, så denne kode skriver det ud som en big-endian 128-bit int. ByteBufferen er bare en nem måde at omdanne to longs til en byte-array.

Nu i praksis vil al konverteringsindsats og hovedpine ikke være de 20 bytes værd, du sparer pr. række.




  1. Vælg Alle begivenheder med begivenhed->Tidsplan->Dato mellem start- og slutdatoer i CakePHP

  2. MySQL vælg én kolonne DISTINCT, med tilsvarende andre kolonner

  3. Mysql-grænse med in statement

  4. Introduktion til OPENJSON med eksempler (SQL-server)