【问题标题】:MYSQL case sensitive search (using hibernate) for utf8用于 utf8 的 MYSQL 区分大小写搜索(使用休眠)
【发布时间】:2009-08-10 16:57:20
【问题描述】:

当我想检查用户名并检索此特定用户名的其他信息时,我有具有 utf8 字符集和 utf8 排序规则的登录表,hql 查询给我与小写和大写相同的结果。 我应该为我的 HQL 查询做什么 我使用 Mysql 5 和 java hibernarte

这是我的查询:

return queryManager.executeQueryUniqueResult("select b.login from BranchEntity b where b.userName = ?", username);

【问题讨论】:

    标签: mysql login hql case-sensitive


    【解决方案1】:

    最简单的方法是将列的定义更改为使用不区分大小写的排序规则,例如utf8_bin

    详情here

    【讨论】:

    • 它似乎对我有用,但必须测试更多,如果它工作正常,我标记了它。
    【解决方案2】:

    添加类

    public class CollateDialect extends MySQLDialect {
        @Override
        public String getTableTypeString() {
            return " COLLATE utf8_bin";
        }
    }
    

    并使用它:

    cfg.setProperty("hibernate.dialect", "org.kriyak.hbm.CollateDialect");
    

    这将使所有查询区分大小写,从而更有意义。

    【讨论】:

    • 这似乎也使列名区分大小写。但是 Hibernate 可以忍受它,我也可以。
    • 如果你这样做,它可能无法正确设置 InnoDB 或 MyISAM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2011-05-01
    • 2011-04-13
    • 2013-09-26
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多