Tidak dapat menambahkan UUID tipe Biner (16) ke dalam SQL

Dengan mengikuti pertanyaan ini dan juga solusinya , saya masih belum bisa menyelesaikan masalahnya. Saya masih mendapatkan "Data terlalu panjang untuk kolom 'id' di baris 1"

  public static byte[] asBytes(UUID uuid) {
    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(uuid.getMostSignificantBits());
    bb.putLong(uuid.getLeastSignificantBits());
    return bb.array();
  }

  UUID id= UUID.randomUUID();
  InsertQueryBuilder runner = new InsertQueryBuilder("test_table")
        .addField("id", asBytes(id));

       return getConnection()
      .flatMap(connection -> runner.run(connection)
        .doOnTerminate(connection::close))

Dari jawaban itu saya mengerti bahwa 16 byte adalah 32 digit hex. Jadi jika saya mengubah tipe kolom menjadi BINARY (32), maka saya tidak mendapatkan kesalahan apa pun dan id berhasil ditulis di DB.

Saya mencoba menjaga ukuran bb ByteBuffer menjadi 8, tapi kemudian saya mengerti;

Pengecualian BufferOverflow

Apa yang saya lewatkan?


person Anum Sheraz    schedule 21.05.2018    source sumber
comment
Apa pertanyaannya? 16 byte adalah BINARY(16) dan 8 byte tidak cukup untuk dua long   -  person Adriano Repetti    schedule 21.05.2018
comment
Jika 16 byte adalah biner (16), lalu mengapa SQL mengeluhkan Data terlalu panjang untuk kolom 'id' di baris 1?   -  person Anum Sheraz    schedule 21.05.2018
comment
Oke, saya rasa saya mengerti dari komentar terakhir Anda sekarang. Saya tidak perlu memasukkan 8 byte lagi. Kueri berhasil dijalankan setelah menghapus ` bb.putLong(uuid.getLeastSignificantBits());` dan menjaga panjang byte 8.   -  person Anum Sheraz    schedule 21.05.2018
comment
Bisakah ByteBuffer langsung digunakan sebagai parameter; atau haruskah Anda mendapatkan array yang mendasarinya?   -  person Uueerdo    schedule 21.05.2018
comment
Jika saya mengonversi UUID ke byte dengan panjang 8, dan kemudian menulisnya ke kolom SQL BINARY(16), saya akan mendapatkan sisa nol, misalnya. 0x34676358617562000000000000000000. Yang saya tidak mengerti adalah MENGAPA SQL mengeluh DATA terlalu panjang, Jika UUID dikonversi ke byte(16)! apakah ada karakter TERSEMBUNYI?   -  person Anum Sheraz    schedule 21.05.2018
comment
Tapi UUID 8 byte sepertinya tidak terlalu unik, jangan hilangkan byte yang paling signifikan   -  person Adriano Repetti    schedule 21.05.2018
comment
Mengapa tidak menyimpan UUID sebagai teks yang dapat dibaca manusia? UUID adalah nilai 128-bit, yang secara teoritis dapat muat dalam 16 byte, tetapi merepresentasikannya sebagai string 36 karakter lebih umum. Ruang tambahan yang diperlukan sebagian besar bukan masalah kecuali Anda berurusan dengan triliunan catatan, namun manfaat terhadap keterbacaan sangat besar.   -  person tadman    schedule 21.05.2018