mysql字符串不支持emoj表情的处理方法

来源:互联网 发布:淘宝上的购物车在哪里 编辑:程序博客网 时间:2024/04/16 19:02

一,修改数据库支持utf8mb4,注意低版本的mysql不支持utf8mb4

 修改my.cnf如下

[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0character-set-client-handshake=FALSEcharacter-set-server=utf8mb4collation-server=utf8mb4_unicode_ci[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

二,存入blob中

代码

@Overridepublic 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;}}

@Overridepublic 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

0 0