gpt4 book ai didi

mysql - Postgres 和 Mysql 之间的排序行为

转载 作者:行者123 更新时间:2023-11-29 12:53:22 26 4
gpt4 key购买 nike

我在 Postgres 和 mysql 之间遇到了一些奇怪的排序行为。

例如,我创建了带有varchar列的简单表,并在Postgres和Mysql中插入了如下两条记录。

create table mytable(name varchar(100));
insert into mytable values ('aaaa'), ('aa_a');

现在,我已经执行了按列排序的简单选择查询。

Postgres 排序顺序:

test=# select * from mytable order by (name) asc;
name
------
aa_a
aaaa
(2 rows)

Mysql排序顺序:

mysql> select * from mytable order by name asc;
+------+
| name |
+------+
| aaaa |
| aa_a |
+------+
2 rows in set (0.00 sec)

Postgres 和 mysql 都以不同的顺序返回相同的记录。

我的问题是哪一个是正确的?

如何在两个数据库中以相同的顺序获取结果?

编辑:

我尝试使用 ORDER BY COLLATE 进行查询,它解决了我的问题。

尝试过这样的

mysql> select * from t order by name COLLATE utf8_bin;
+------+
| name |
+------+
| aa_a |
| aaaa |
+------+
3 rows in set (0.00 sec)

谢谢。

最佳答案

没有“正确”的数据排序方法。

您需要阅读“语言环境”。

不同的区域设置将提供(除其他外)不同的排序顺序。您可能有一个使用 ISO-8859-1 或 UTF-8 的数据库,它们可以表示多种不同的语言。英语的排序规则与法语或德语的排序规则不同。

PostgreSQL使用底层操作系统对区域设置的支持,并且并非所有区域设置在所有平台上都可用。另一种方法是提供您自己的支持,但这样您可能会在一台机器内出现不兼容性。

我相信MySQL采用第二个选项,但我不是 MySQL 专家。

关于mysql - Postgres 和 Mysql 之间的排序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com