我有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
我正在使用hibernate 3.2.7.ga和spring 2.5.6.SEC03
这是hibernate日志:
Hibernate: /* from FirstName where name='ИННА' */ select firstname0_.`id` as id1_24_, firstname0_.`name` as name2_24_ from `first_name` firstname0_ where firstname0_.`name`='ИННА' limit ?
答案 0 :(得分:3)
感谢所有人,我找到了答案。
问题出在连接字符串中。
我做了重构并将连接字符串移动到属性文件而不是带有spring-bean的xml。但我没有将“&
”实体更改为“&”。
成功连接字符串位于属性文件
jdbc:mysql://${host}:${port}/${database}?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
XML文件将&
个实体更改为正确但属性格式不会这样做。
答案 1 :(得分: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 =在你的情况下它将是“ИННА”
答案 2 :(得分:0)
您是否尝试在数据库级别更改字符编码? 根据MySQL文档,“cp1251”
支持西里尔字符您也可以查看this link