sql >> Base de Datos >  >> RDS >> Mysql

Cómo guardar un UUID como binario (16) en java

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

Una pequeña explicación:su tabla usa BINARY (16), por lo que serializar UUID como sus bytes sin procesar es un enfoque realmente sencillo. Los UUID son esencialmente enteros de 128 bits con algunos bits reservados, por lo que este código lo escribe como un entero de 128 bits big-endian. El ByteBuffer es solo una manera fácil de convertir dos largos en una matriz de bytes.

Ahora, en la práctica, todo el esfuerzo de conversión y los dolores de cabeza no valdrán los 20 bytes que ahorras por fila.