sql >> Databasteknik >  >> RDS >> Mysql

Hur man sparar en UUID som binär(16) i java

Försök att lagra det som 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();

Lite av en förklaring:din tabell använder BINARY(16), så att serialisera UUID som dess råa bytes är ett väldigt enkelt tillvägagångssätt. UUID är i huvudsak 128-bitars ints med några reserverade bitar, så den här koden skriver ut det som en big-endian 128-bitars int. ByteBuffer är bara ett enkelt sätt att förvandla två longs till en byte-array.

Nu i praktiken kommer all konvertering och huvudvärk inte att vara värda de 20 byte du sparar per rad.




  1. mysql datetime jämförelse

  2. XCode, Authentication och NSUserDefaults

  3. MySQL-felsökningsverktyg långsamma frågor?

  4. oracle diff:hur jämför man två tabeller?