sql
ORDER BY CONVERT(ss.road USING gbk), CONVERT(l.name USING gbk);
数据量小的时候是没问题的,但是如果查询的数据量大,会超过sql默认排序文件大小,mysql会使用磁盘排序,进而造成sql慢
如下图所示
内存中文排序
package com.ly.traffic.ground.saas.util.sort;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
/**
* 排序工具类
*
* @author pilgrim
*/
public class SortUtil {
// Collator 类是用来执行区分语言环境的 String 比较的,这里选择使用CHINA
private static final Comparator chinaCmp = Collator.getInstance(java.util.Locale.CHINA);
/**
* 排序
*
* @param list
* @return
*/
public static Object[] sortByZh(List<String> list) {
Object[] array = list.toArray();
// 使根据指定比较器产生的顺序对指定对象数组进行排序。
Arrays.sort(array, chinaCmp);
return array;
}
/**
* test
*
* @param args
*/
public static void main(String[] args) {
String[] arr = {"张三", "李四", "王五", "刘六", "啊啊", "把", "拆"};
// 使根据指定比较器产生的顺序对指定对象数组进行排序。
Arrays.sort(arr, chinaCmp);
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
System.out.println();
}
}
但是中文排序会有个别字段排序不准确,大部分场景排序是正确的