Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So speichern Sie eine UUID als Binary (16) in Java

Versuchen Sie es als Bytes zu speichern:

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

Eine kleine Erklärung:Ihre Tabelle verwendet BINARY (16), daher ist das Serialisieren von UUID als Rohbytes ein wirklich einfacher Ansatz. UUIDs sind im Wesentlichen 128-Bit-Ints mit einigen reservierten Bits, daher schreibt dieser Code sie als Big-Endian-128-Bit-Ints aus. Der ByteBuffer ist nur eine einfache Möglichkeit, zwei Longs in ein Byte-Array umzuwandeln.

In der Praxis sind der ganze Konvertierungsaufwand und die Kopfschmerzen die 20 Bytes, die Sie pro Zeile sparen, nicht wert.