【web開発】spring+hibernate 4は中国語のソートをサポート
1510 ワード
mysqlのutf 8符号化フォーマットでの中国語のソートに問題が発生します.現在はhqlクエリーを使用しているため、元のsql関数convertはサポートされていません.有効な解決方法は次のとおりです.
(1)新しいクラスを作成し、MySQL 5 Dialectから派生する
なお、hibernate 4版ではStandardBasicType.STRING(パッケージorg.hibernate.type.StandardBasicType;)それは...STRING.
(2)コンフィギュレーションファイルで参照または変更:
元のhibernatedialectはorgに設定可能である.hibernate.dialect.MySQLDialectは、カスタムクラスMyISAMDialectのスーパークラスです.(3)hqlクエリ文を使用する場合、中国語が表示される可能性のある列にnameなどの名前を使用します.
これで中国語の正しいソートが完了します.
(1)新しいクラスを作成し、MySQL 5 Dialectから派生する
public class MyISAMDialect extends MySQL5Dialect {
public MyISAMDialect(){
super();
registerFunction("convert_mine", new SQLFunctionTemplate(StandardBasicTypes.STRING, "convert(?1 using gbk)"));
}
@Override
public String getTableTypeString() {
return "engine=MyISAM";
}
}
なお、hibernate 4版ではStandardBasicType.STRING(パッケージorg.hibernate.type.StandardBasicType;)それは...STRING.
(2)コンフィギュレーションファイルで参照または変更:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props> //...
// ...
<prop key="hibernate.dialect">com.miniwork.mymanager.util.MyISAMDialect</prop> //...
</props>
</property>
//...
</property>
</bean>
元のhibernatedialectはorgに設定可能である.hibernate.dialect.MySQLDialectは、カスタムクラスMyISAMDialectのスーパークラスです.(3)hqlクエリ文を使用する場合、中国語が表示される可能性のある列にnameなどの名前を使用します.
from xxx order by convert_mine(name);
これで中国語の正しいソートが完了します.