Como salvar um UUID como binário (16) em java
Eu tenho uma tabela TestTable com ID de colunas como binário (16) e nome como varchar (50)
Eu tenho tentado armazenar um UUID ordenado como PK, como neste artigoArmazene o UUID de maneira otimizada
Vejo que o UUID é salvo no banco de dados como HEX (blob)
Então, eu quero salvar esse ID do java, mas estou recebendo este erro
Truncamento de dados: dados muito longos para a coluna 'ID' na linha 1
Atualmente, estou usando a biblioteca sql2o para interagir com o mysql
Então, basicamente, este é o meu código
String suuid = UUID.randomUUID().toString();
String partial_id = suuid.substring(14,18) + suuid.substring(9, 13) + suuid.substring(0, 8) + suuid.substring(19, 23) + suuid.substring(24)
String final_id = String.format("%040x", new BigInteger(1, partial_id.getBytes()));
con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
.addParameter("id", final_id)
.addParameter("name", "test1").executeUpdate();
O ID parcial deve ser algo como isto11d8eebc58e0a7d796690800200c9a66
Eu tentei esta afirmação no mysql sem problema
insert into testtable(id, name) values(UNHEX(CONCAT(SUBSTR(uuid(), 15, 4),SUBSTR(uuid(), 10, 4),SUBSTR(uuid(), 1, 8),SUBSTR(uuid(), 20, 4),SUBSTR(uuid(), 25))), 'Test2');
Mas recebi o mesmo erro ao remover a função unhex. Então, como posso enviar o ID correto do Java para o mysql?
ATUALIZAR
Eu resolvi meu problema inspirado na resposta deDavid Ehrmann. Mas no meu caso, usei os HexUtils do tomcat para transformar minha sequência UUID classificada em bytes []:
byte[] final_id = HexUtils.fromHexString(partial_id);