在java中从数据库中检索法语字符

时间:2014-07-17 14:46:31

标签: java sql spring hibernate

我的样本输入为“Mickaël”
当我点击数据库时,通过在hibernate代码片段中添加条件来检索值如下。

pCriteria.add(Restrictions.ilike("lastName", lLastName.toLowerCase() + "%"));

我只用“mickaël”获得结果。

  

但是根据我的要求,我需要同时取“Mickaël”和“Mickael”

有人可以帮忙吗??? TIA

2 个答案:

答案 0 :(得分:1)

您必须在表格或查询(see this post

上设置例如COLLATE French_CI_AI的排序规则

答案 1 :(得分:0)

试试这样:

pCriteria.add(Restrictions.ilike("lastName", lLastName.toLowerCase().replaceAll('[ë]', '_')));

我正在尝试创建此字符串Micka_l。标记'_'代表任何字符,因此如果您的表格中有Micka^lMickaql,您也会看到此记录。您可以在方括号中添加更多特殊的法语字符,例如[ëöèù],以逃避其他特殊字符。

如果你不想让其他角色试试这个:

pCriteria.add(pCriteria.or(
    Restrictions.eq("lastName", lLastName.toLowerCase())), 
    Restrictions.eq("lastName", lLastName.toLowerCase().replaceAll('[ë]', 'e'))
  )
);

我假设您输入了整个单词,如果您不将eq更改为ilike并在行的末尾添加百分号,如下所示:

pCriteria.add(pCriteria.or(
    Restrictions.ilike("lastName", lLastName.toLowerCase() + "%")), 
    Restrictions.ilike("lastName", lLastName.toLowerCase().replaceAll('[ë]', 'e') + "%")
  )
);

如果还有其他角色需要逃脱,你必须像上面那样解决这些问题。