使用 JdbcTemplate 将字节数组存储到 MySQL 二进制列中
Storing a byte array into MySQL binary column with JdbcTemplate
我有一个MySQLtable(简体):
CREATE TABLE `tokens` (
`token` BINARY(16) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后我尝试像这样插入一行:
JdbcTemplate jdbcTemplate; // org.springframework.jdbc.core.JdbcTemplate
...
String sql = "INSERT INTO `tokens` (`token`) VALUES (?)";
String token = "123e4567e89b12d3a456426655440000"; // UUID
jdbcTemplate.update(sql, new Object[]{token.getBytes()});
但是我遇到了这个异常:
Data truncation: Data too long for column 'token' at row 1
我做错了什么?谢谢
编辑:看我的回答,我错过了十六进制转换(token 是一个 UUID)。
这是存储令牌(它是一个 UUID)的解决方案:
jdbcTemplate.update(sql, new Object[]{DatatypeConverter.parseHexBinary(token)});
让我们知道是否还有其他方法...
我有一个MySQLtable(简体):
CREATE TABLE `tokens` (
`token` BINARY(16) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后我尝试像这样插入一行:
JdbcTemplate jdbcTemplate; // org.springframework.jdbc.core.JdbcTemplate
...
String sql = "INSERT INTO `tokens` (`token`) VALUES (?)";
String token = "123e4567e89b12d3a456426655440000"; // UUID
jdbcTemplate.update(sql, new Object[]{token.getBytes()});
但是我遇到了这个异常:
Data truncation: Data too long for column 'token' at row 1
我做错了什么?谢谢
编辑:看我的回答,我错过了十六进制转换(token 是一个 UUID)。
这是存储令牌(它是一个 UUID)的解决方案:
jdbcTemplate.update(sql, new Object[]{DatatypeConverter.parseHexBinary(token)});
让我们知道是否还有其他方法...