Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment enregistrer un UUID en tant que binaire (16) en Java

Essayez de le stocker en octets :

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

Une petite explication :votre table utilise BINARY(16), donc la sérialisation de l'UUID en tant que ses octets bruts est une approche très simple. Les UUID sont essentiellement des ints 128 bits avec quelques bits réservés, donc ce code l'écrit comme un int big-endian 128 bits. Le ByteBuffer est juste un moyen simple de transformer deux longs en un tableau d'octets.

Désormais, dans la pratique, tous les efforts de conversion et les maux de tête ne valent pas les 20 octets que vous économisez par ligne.