我有一个表,其中有一些 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();
}
我的表有一行 id=26 和 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
和 Ñ
相等。
我做错了什么?
最佳答案
您可以尝试在 jdbc 连接级别设置排序规则。 在您定义连接 url 的位置:
jdbc:mysql://[主机:端口]/[数据库][?propertyName1][=propertyValue1]
尝试这个属性:connectionCollation=utf8_spanish_ci
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html
希望对您有所帮助。
关于java - 在 Java、Hibernate 和 MySQL 中,ñ 等于 n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26663768/