如何才能支持utf8mb4

我已经修改了my.cnf,已经在durid里面添加了

DruidPlugin dp = new DruidPlugin(PropKit.get("db.jdbcUrl"),PropKit.get("db.uname"),PropKit.get("db.passwd"));

dp.setConnectionInitSql("set names utf8mb4");

也修改了数据库,字段的字符集。但是依然是只能写入emoji,而无法读取,一读取就出错:

Incorrect string value: '\xF0\x9F\x91\x8C\xF0\x9F...' for column 'Dirty' at row 1

注意这个Dirty字段并不是我表里的。


评论区

JFinal

2018-09-04 20:41

这个直接改数据库那头就可以了,最后在用的时候,可以将 jdbcUrl 中的 utf8 改一下,例如:
jdbcUrl=jdbc:mysql://localhost/jfinal_club?characterEncoding=utf8

上面的 utf8 改成 utf8mb4

总的来说,就是要在数据库那边去改,不要折腾项目这头

JFinal

2018-09-04 20:44

数据库那边要将数据库、数据表、数据表中的 varchar、text 这类字段改成 utf8mb4

如果是新创建的数据库,直接在建库的时候指定 utf8mb4,那么数据表、表中的字段就不用理了,因为这两个默认是跟着创建数据库时的字符集去走的

如果你的数据库现在已经是 utf8 ,但是要改成 utf8mb4,最好是去网上找找这方面的资料

个人建议重新创建一个指定为 utf8mb4 的数据库,然后用 mysql 的命令导入到新库里面去,导入的时候指定字符集,彻底解决一下问题

flash866

2018-09-05 08:31

@JFinal 波总好,我就jdbcUrl=jdbc:mysql://localhost/jfinal_club?characterEncoding=utf8这个没有修改了,因为修改成utf8mb4后会抛异常,貌似不支持这个。

JFinal

2018-09-05 10:20

@flash866 可能是 jdbcUrl 还不支持 utf8mb4 这个写法,也可能是你的 JDBC jar 包的版本太低了,毕竟 utf8mb4 是高版本的 mysql 才开始支持的

多做尝试、多调整,在 jdbcUrl 中实在不能用 utf8mb4 也是没有关系的,这个不配置默认就会按 mysql 服务端的配置走

mysql 服务端的配置文件中默认是指定了 server 端与 client 端的字符集的

Fabrice

2018-09-11 01:51

druidPlugin.setConnectionInitSql("set names utf8mb4");

flash866

2018-09-12 11:18

@Fabrice 看我的帖子,里面已经用过了,没有效果

JFinal

2018-09-12 14:43

@flash866 是你的数据库太老了吧, utf8mb4 这个应该是 5.6 及以上版本才开始支持的

热门反馈

扫码入社