gpt4 book ai didi

java - 当我将其部署在 openshift 上时,我的 WEB 应用程序中的搜索仅适用于拉丁符号,但它在我的本地计算机上运行良好

转载 作者:行者123 更新时间:2023-12-01 11:25:18 34 4
gpt4 key购买 nike

我有一个问题。我通过 Spring MVC 和 Hibernate 制作了一个 WAB 应用程序,它有一个搜索。问题是当我在 openshift 上部署 WEB 应用程序时,搜索仅适用于拉丁符号。它不适用于西里尔字母。但它在我的本地机器上运行得很好。所以我不知道它会是什么。我在 openshift 上有与本地计算机上相同的数据库,我转储了数据并将其导入到 openshift。

这是搜索的方法:

public List<News> getNewsWithSubstring(String str) {
Session session = sessionFactory.getCurrentSession();
Criteria crt = session.createCriteria(News.class);
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.like("titleUa", "%" + str + "%"));
disjunction.add(Restrictions.like("titleEn", "%" + str + "%"));
disjunction.add(Restrictions.like("titleRu", "%" + str + "%"));
disjunction.add(Restrictions.like("descriptionUa", "%" + str + "%"));
disjunction.add(Restrictions.like("descriptionEn", "%" + str + "%"));
disjunction.add(Restrictions.like("descriptionRu", "%" + str + "%"));
crt.add(disjunction);
return crt.list();
}

这是连接到数据库的设置(来自 springServlet-context.xml):

 <bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.goldcamtech.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="c3p0.idle_test_period">120</prop>
<prop key="hibernate.connection.characterEncoding">utf8</prop>
</props>
</property>
</bean>

<bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.18.97.4:3306/gctech_site?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

也许有人有什么想法?为什么它在我的本地计算机上可以使用拉丁语和西里尔语,但在 openshift 上却不能使用西里尔语?谢谢!

最佳答案

问题很可能在于本地计算机上的 MySQL 和 OpenShift 上的 MySQL 的默认配置。我建议比较表/数据库上的字符集。如果您在创建表/数据库时没有明确指定,MySQL 将使用 my.cnf

中的默认值

另请参阅:Database Character Set and Collation

附注另请注意,像这样的代码

disjunction.add(Restrictions.like("titleUa", "%" + str + "%"));

在某些情况下可能会出现错误(例如,如果用户的字符串包含%_字符),甚至可能导致SQL注入(inject)。

关于java - 当我将其部署在 openshift 上时,我的 WEB 应用程序中的搜索仅适用于拉丁符号,但它在我的本地计算机上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863288/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com