一,修改数据库支持utf8mb4,注意低版本的mysql不支持utf8mb4
修改my.cnf如下
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
二,存入blob中
代码
@Override
public int insertOrUpdateDataValueByBytes(String no, String value) {
try {
byte[] bytesValue = value.getBytes("utf-8");
Object[] obs = new Object[] { no, bytesValue, new Date() };
return jdbcTemplate.update("REPLACE INTO t_data_bytes (no, value, timestamp) VALUES(?, ?, ?)", obs);
} catch (UnsupportedEncodingException e) {
LogCore.BASE.error("insertOrUpdateDataValueByBytes error,k={},v={}",no, value, e);
return -2;
}
}
@Override
public void initDataValueMapByBytes(Map<String, String> map) {
Predicate<Map<String, Object>> pr = x -> Util.nonNull(x.get("no"), x.get("value"));
jdbcTemplate.queryForList("SELECT * FROM t_data_bytes").stream().filter(pr).forEach(x -> {
try {
String key = String.valueOf(x.get("no"));
String value = new String((byte[]) x.get("value"), "utf-8");
map.put(key, value);
} catch (Exception e) {
LogCore.BASE.error("init DateValueMapByBytes err:", e);
}
});
}
三,使用base64