【问题标题】:In Java, Hibernate and MySQL, ñ equals to n在 Java、Hibernate 和 MySQL 中,ñ 等于 n
【发布时间】: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Ñ 等于。

我做错了什么?

【问题讨论】:

    标签: java mysql hibernate utf


    【解决方案1】:

    您可以尝试在 jdbc 连接级别设置排序规则。 在你定义连接url的地方:

    jdbc:mysql://[host:port]/[database][?propertyName1][=propertyValue1]

    试试这个属性:connectionCollat​​ion=utf8_spanish_ci

    http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

    希望对你有所帮助。

    【讨论】:

    • 我会尝试它是否有效,我标记为已解决谢谢。
    • @chiperortiz 我在 MYSQL 数据库中对其进行了测试,但它没用 :( 我认为唯一的方法是在 SELECTs 中添加排序规则
    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2014-05-08
    • 2014-11-30
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多