我有一个表TestTable,列ID为二进制(16),名称为varchar(50)
我看到UUID作为HEX(blob)保存在数据库中
所以我想从java中保存这个ID,但是我收到了这个错误
Data truncation: Data too long for column ‘ID’ at row 1
我目前正在使用库sql2o与mysql进行交互
所以基本上这是我的代码
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();
部分ID应该是这样的11d8eebc58e0a7d796690800200c9a66
我在mysql中尝试了这个语句没有问题
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');
但是当我删除unhex函数时,我得到了同样的错误.那么我怎样才能将正确的ID从Java发送到mysql?
UPDATE
我在David Ehrmann的答案中解决了我的问题.但在我的情况下,我使用tomcat中的HexUtils将我的已排序的UUID字符串转换为bytes []:
byte[] final_id = HexUtils.fromHexString(partial_id);