Невозможно добавить 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), я не получу никакой ошибки, и идентификатор будет успешно записан в БД.

Я пытался сохранить размер ByteBuffer bb равным 8, но потом получаю;

BufferOverflowException

Что мне не хватает?


person Anum Sheraz    schedule 21.05.2018    source источник
comment
Что за вопрос? 16 байтов ДВОИЧНЫЕ(16) и 8 байтов недостаточно для двух long   -  person Adriano Repetti    schedule 21.05.2018
comment
Если 16 байтов являются двоичными (16), то почему SQL жалуется, что данные слишком длинные для столбца «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 жалуется, что ДАННЫЕ слишком длинные, если преобразовать UUID в байт (16)! есть СКРЫТЫЕ символы?   -  person Anum Sheraz    schedule 21.05.2018
comment
Но 8-байтовый UUID вряд ли будет действительно уникальным, не отбрасывайте младшие байты   -  person Adriano Repetti    schedule 21.05.2018
comment
Почему бы не сохранить UUID в виде удобочитаемого текста? UUID – это 128-битное значение, которое теоретически может умещаются в 16 байт, но более типичным является представление их в виде 36-символьной строки. Требуемое дополнительное пространство в значительной степени не является проблемой, если вы не имеете дело с триллионами записей, но преимущества для удобства чтения огромны.   -  person tadman    schedule 21.05.2018