3

我有 MySQL InnoDB 表 utf-8 编码。该表只有 id 和 name 字段。名称为俄语,1 个英文名称用于测试目的。英文名称选择正常,但是当尝试使用俄语名称进行选择时,它返回空列表。我尝试使用 Criterion 和 HQL 构建查询。

getHibernateTemplate().find("from FirstName where name='free' ");
getHibernateTemplate().find("from FirstName where name='ИННА' ");

这是连接字符串 - ?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8

我正在使用休眠 3.2.7.ga 和 spring 2.5.6.SEC03

这是休眠日志:

Hibernate: /* from FirstName where name='ИННА'  */ select firstname0_.`id` as id1_24_, firstname0_.`name` as name2_24_ from `first_name` firstname0_ where firstname0_.`name`='ИННА' limit ?
4

3 回答 3

3

谢谢大家,我找到了答案。

问题出在连接字符串中。我确实重构并将连接字符串移动到属性文件而不是带有spring-bean的xml。但我没有将“ &”实体更改为“&”。成功的连接字符串在属性文件中

jdbc:mysql://${host}:${port}/${database}?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

XML 文件将&实体更改为正确的,但属性格式不这样做。

于 2012-06-12T14:17:25.427 回答
0
Criteria coCriteria = Session.createCriteria(coClass).add(Restrictions.eq(strColumnName, strColumnValue));
list = coCriteria.list();

您是否尝试过使用此休眠标准。
其中“Session”将是hibernate生成会话的会话对象。
1)coClass = "pojo class name"
2)strColumnName = "pojo class field name" 在你的情况下它将是 "name" 我猜
3)strColumnValue = 在你的情况下它将是 "ИННА"

于 2012-06-12T11:10:26.850 回答
0

您是否尝试在数据库级别更改字符编码?根据 MySQL 文档,“cp1251”支持西里尔字符

你也可以看看这个链接

于 2012-06-12T13:58:35.587 回答