我正在编写一个通过复杂的集成测试order by
到 PostgreSQL,然后检查数据是否以正确的顺序返回。我正在用 Java 编写这个集成测试及其String.compareTo
方法的排序方式似乎与 PostgreSQL 不同。我在 PostgreSQL 数据库上运行了这个:
SELECT regexp_split_to_table('D d a A c b', ' ') ORDER BY 1;
它是这样回应的:
a
A
b
c
d
D
然后我创建了这个单元测试来将其与 Java 排序的方式进行比较:
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.junit.Test;
import java.util.List;
import static junit.framework.Assert.assertEquals;
public class PostgresqlSortOrderTest {
@Test
public void whenJavaSortsStringsThenItIsTheSameAsWhenPostgresqlSortsStrings() {
List<String> postgresqlOrder = Lists.newArrayList("a", "A", "b", "c", "d", "D");
Ordering<String> ordering = new Ordering<String>() {
@Override
public int compare(String left, String right) {
return left.compareTo(right);
}
};
List<String> javaOrdering = ordering.sortedCopy(postgresqlOrder);
assertEquals(postgresqlOrder, javaOrdering);
}
}
失败并输出以下内容:
Expected :[a, A, b, c, d, D] //postgresql
Actual :[A, D, a, b, c, d] //java
我对这里的术语非常无知。我想知道这些不同字符串类型的名称,以便我可以更好地进行交流。但更重要的是,如何让 Java 像 PostgreSQL 那样进行排序?