1

我有一个包含两列的表:

ID     描述
1 第一行
2 第二行
3 _
4 1 第一个数字行

我有一个疑问

SELECT * FROM TABLE ORDER BY DESCRIPTION

问题是我根据运行代码的机器检索不同的结果。如果我运行代码

  • linux (centos) 我得到以下结果
    ID      描述
    4 1 第一个数字行
    3 _
    1 第一行
    2 第二行

  • windows (7) 我得到以下结果
    ID      描述
    3 _
    1 第一行
    2 第二行
    4 1 第一个数字行

  • MAC OS(Snow Leopard) 我得到以下结果
    ID      描述
    3 _
    1 第一行
    2 第二行
    4 1 第一个数字行

因此,您可以看到下划线“_”的处理方式因我运行查询的机器而异:(。
这是驱动程序的问题吗?为什么我没有得到相同的结果?

4

2 回答 2

1

10 倍的提示。确实问题出在locale的设置上,我有:

  • 在 Linux 上

    LANG=en_US.UTF-8

    LC_CTYPE="en_US.UTF-8"

  • 在 Mac 上

    LANG=de_DE.UTF-8

    LC_CTYPE="de_DE.UTF-8"

在德语 utf-8 上的 linux 机器上设置语言环境后,我在 linux 上的结果与在另一台机器(mac 和 windows)上的结果相同,现在构建恢复稳定:)。

我将尝试使用 NLS_LANG 的配置,以便能够将 linux 机器的语言环境设置回英语 utf-8。

于 2012-08-03T08:09:59.267 回答
1

顺序取决于您的 NLS 设置。 请参阅 NLS_LANG 和 NLS_SORT 设置。如果您在所有环境中提供相同的 NLS 设置,则顺序将相同。

您还可以明确指定顺序:

SELECT * 
  FROM TABLE 
 ORDER BY NLSSORT(Description, 'NLS_SORT = BINARY')

我预计排序的性能在这里并不重要,因为如果列被索引,查询可能不会使用描述列上的索引。

于 2016-09-22T10:49:47.460 回答