带有外部字符的Hibernate MySQL UTF8查找问题

时间:2018-08-03 00:42:28

标签: java mysql spring hibernate collation

我有一个简单的spring / hibernate应用程序,该应用程序由MySQL DB支持。

数据库是字符集utf8mb4和排序规则utf8mb4_bin。我有很多数据包含非拉丁字符。

我有一个页面表(id,pagename,text),其中pagename是唯一索引,我使用Hibernate Criteria API查询该表:

Page result = session.createQuery(query.where(
                builder.equal(root.get("pagename"), name)
        ).select(root)).getSingleResult();

对于某些值,我有一个ResultNotFound异常。尽管有匹配的记录。我可以通过查询来验证这一点:

select count(*) from page where pagename="Tři_oříšky_pro_Popelku"
1 row in set (0.01 sec)

如果我通过PK(而不是英国)来查找Java中的字符串,则字符串比较返回true

session.createSQLQuery(
    "select * from page p where p.id = :pid")
    .addEntity(Page.class)
    .setParameter("pid", 29752).list().get(0).getPageName().equals(name);

我在这里错过了一些非常简单的事情吗?我已经尝试过在休眠配置文件中使用字符集和编码了,而且很卡住!

我正在使用org.hibernate:hibernate-java8:5.2.10.Finalmysql:mysql-connector-java:6.0.6

0 个答案:

没有答案