【发布时间】:2014-10-30 21:37:24
【问题描述】:
我有一个包含一些 varchars 列的表。我们正在使用 Hibernate 和 MySQL。
当 MySQL 将N 与Ñ 进行比较匹配时出现问题;我在其他SO post 中的MYSQL 中似乎有解决方案,例如
SELECT FIRST_NAME
FROM CONTACT
WHERE FIRST_NAME LIKE '%ñ%' COLLATE utf8_spanish_ci
和
SELECT FIRST_NAME FROM CONTACT WHERE FIRST_NAME LIKE BINARY '%ñ%'
我想知道如何通过查询在 Hibernate 中做到这一点。我的意思是写一个与N 和Ñ 不匹配的标准,而无需在引擎MySQL 上做太多事情。这是否可能像在 Hibernate 中使用 BINARY 或使用 COLLATE 作为参数,或任何其他解决方法?
更新
我试过这段代码
private final Student test(final int id)
{
return (Student)currentSession().createCriteria(Student.class)
.add(Restrictions.idEq(id))
.add(Restrictions.ilike("c01","n",MatchMode.ANYWHERE))
.uniqueResult();
}
我的表有a row with id=26 and c01='ñlk',我在hibernate.cfg中设置了这个:
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/database?connectionCollation=utf8_spanish_ci</property>
我已经测试了代码
final Student student = clazz.test(26);
System.out.println("results: "+(student==null?"NULO":("ID: "+student.getId()+" c01: "+student.getC01())));
但仍在返回结果:
results: ID: 26 c01: ñlk
我希望不返回结果,但仍在考虑 N 和 Ñ 等于。
我做错了什么?
【问题讨论】: