ไม่สามารถเพิ่ม UUID ประเภท Binary (16) ลงใน SQL

โดยทำตามนี้คำถามและวิธีแก้ปัญหาด้วย ฉันยังคงไม่สามารถแก้ไขปัญหาได้ ฉันยังคงได้รับ "ข้อมูลยาวเกินไปสำหรับคอลัมน์ 'id' ที่แถว 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))

จากคำตอบนั้นฉันเข้าใจว่า 16 ไบต์มีเลขฐานสิบหก 32 หลัก ดังนั้นหากฉันเปลี่ยนประเภทคอลัมน์เป็น BINARY (32) ฉันจะไม่ได้รับข้อผิดพลาดใด ๆ และ id จะถูกเขียนในฐานข้อมูลสำเร็จ

ฉันพยายามรักษาขนาด ByteBuffer bb ไว้ที่ 8 แต่แล้วฉันก็ได้

BufferOverflowException

ฉันพลาดอะไรไป?


person Anum Sheraz    schedule 21.05.2018    source แหล่งที่มา
comment
คำถามคืออะไร? 16 ไบต์คือ BINARY(16) และ 8 ไบต์ไม่เพียงพอสำหรับสอง long   -  person Adriano Repetti    schedule 21.05.2018
comment
หาก 16 ไบต์เป็นไบนารี (16) แล้วเหตุใดฉัน SQL จึงบ่น Data ยาวเกินไปสำหรับคอลัมน์ 'id' ที่แถว 1   -  person Anum Sheraz    schedule 21.05.2018
comment
โอเค ฉันคิดว่าฉันเข้าใจแล้วจากความคิดเห็นล่าสุดของคุณตอนนี้ ฉันไม่จำเป็นต้องใส่ความยาวอีก 8 ไบต์ การค้นหาดำเนินการได้สำเร็จหลังจากลบ ` bb.putLong(uuid.getLeastSignificantBits());` และคงความยาวไบต์ไว้ที่ 8   -  person Anum Sheraz    schedule 21.05.2018
comment
ByteBuffer สามารถใช้เป็นพารามิเตอร์โดยตรงได้หรือไม่ หรือคุณควรได้รับอาเรย์พื้นฐาน?   -  person Uueerdo    schedule 21.05.2018
comment
ถ้าฉันแปลง UUID เป็นไบต์ที่มีความยาว 8 แล้วเขียนลงในคอลัมน์ SQL ของ BINARY(16) ฉันจะเหลือศูนย์ที่เหลือเช่น 0x34676358617562000000000000000000. สิ่งที่ฉันไม่เข้าใจคือทำไม SQL ถึงบ่น DATA ยาวเกินไป หากแปลง UUID เป็น byte(16) ! มีตัวละครที่ซ่อนอยู่บ้างไหม?   -  person Anum Sheraz    schedule 21.05.2018
comment
แต่ UUID ขนาด 8 ไบต์ไม่น่าจะมีเอกลักษณ์เฉพาะตัวจริงๆ อย่าทิ้งไบต์ที่มีนัยสำคัญน้อยที่สุด   -  person Adriano Repetti    schedule 21.05.2018
comment
ทำไมไม่เก็บ UUID ไว้เป็นข้อความที่มนุษย์สามารถอ่านได้? UUID เป็นค่า 128 บิต ซึ่งสามารถตามทฤษฎีได้ มีขนาด 16 ไบต์ แต่การแสดงเป็นสตริง 36 อักขระนั้นเป็นเรื่องปกติมากกว่า พื้นที่เพิ่มเติมที่ต้องการนั้นส่วนใหญ่ไม่เป็นปัญหา เว้นแต่ว่าคุณจะต้องจัดการกับบันทึกนับล้านล้านรายการ แต่ประโยชน์ของการอ่านนั้นมีมากมาย   -  person tadman    schedule 21.05.2018