如何检查(甚至设置)mdb(ms access)文件中的排序规则

问题描述 投票:0回答:1

我成功将Access DB迁移到MySQL DB。一切似乎都很好,但我需要 MySQL DB 的更具体行为。
在选择选项“sort A to Z”之后,我需要与 Access DB 中完全相同的查询结果排序。
我在 Java 应用程序中使用这个结果。

MySQL 表为 UTF-8,排序规则设置为 utf8_general_ci。
示例查询是:

"SELECT encode, language FROM suffixes ORDER BY encode COLLATE utf8_unicode_ci"

它返回相似的结果,但排序存在不可接受的差异。

Access 对结果进行如下排序:

001_01._02.1_02.2.1_02.4_05.e.3.1_07.2.2_15.5.d_20.3.2.1_31.2.2_33.3.4_001
001_01._02.1_02.4.1_06.4.1_06.4.2_07.2.1.1_07.2.2_10.1_11.1.3_20.3.2.1_20.3.7_20.6.8_001

Java 对结果进行这样的排序:

001_01._02.1_02.2.1_02.4_05.e.3.1_07.2.2_15.5.d_20.3.2.1_31.2.2_33.3.4_001                                                              
001_01._02.1_02.4_06.1_06.2.4.1.2_06.2.4.1.3_06.3.1_07.2.1.1_07.2.2.1_11.2.2_15.2.1.a.1_15.5.a_20.3.2.2.1.a_20.7.1.5_20.8_33.4.5.3_001 

另外我不知道如何在 Access 中检查字符集和排序规则。

任何人都可以给我提示我应该做什么才能获得正确的结果吗?

java mysql ms-access collation
1个回答
0
投票

我明白了这一点。 我使用 Collator 类进行正确排序。

仅供参考,它看起来像这样(这是 ArrayList 的排序):

public class AccessSorter
{ 
final static String letters = "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I < j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R < s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z";
final static String digits = "< 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9";
final static String special = "< '.' < '_'";
private RuleBasedCollator accessCollator;


AccessSorter()
{
    try
    {
        accessCollator = new RuleBasedCollator(special + digits + letters);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
}


SomeComparator getSomeComparator()
{
    return new SomeComparator();
}

class SomeComparator implements Comparator<String[]>
{
    @Override
    public int compare(String[] s1, String[] s2)
    {
       return accessCollator.compare(s1[1], s2[1]);
    }
}

}

使用示例:

Collections.sort(someCollectionOfStringArray, new AccessSorter().getSomeComparator()

现在您无需担心 access 或 mySQL 的排序规则。你自己定规则。当然,对这样的数组进行排序需要一些时间。
请记住,如果您需要多次对大数组进行排序,请考虑使用 getCollatorKey() 来提高效率。
另请记住,如果您需要添加整理器分号、句点、引号,请将它们放入 ' '。
我希望它能以某种方式帮助你。 问候。

© www.soinside.com 2019 - 2024. All rights reserved.