中文排序方法

126 阅读1分钟

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();
    }


}

但是中文排序会有个别字段排序不准确,大部分场景排序是正确的