java - 在 Java、Hibernate 和 MySQL 中,ñ 等于 n

标签 java mysql hibernate utf

我有一个表,其中有一些 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]

尝试这个属性:connectionCollat​​ion=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/

相关文章:

java - 加入查询在 Hibernate 中不起作用

java - Spring RestTemplate POST请求以及URL编码数据

java - Spring Boot - javax Import 语句无法正常工作

linux - 管理每周备份

mysql - mysql select查询可以使用多少个字段?

java - Hibernate两次向Join Table插入数据导致Spring Boot项目出现 "ORA-00001: unique constraint violated"

java - 如何使用 Maven 创建构建依赖项?

java - 在Java中,我可以将这些 "replace"命令组合在一起吗?

php - 数据排名/排序的正确且最有效的方法是什么

java - Hibernate 不使用 Firebird 序列,而是尝试使用表