Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres和Mysql之间的排序顺序行为_Mysql_Postgresql - Fatal编程技术网

Postgres和Mysql之间的排序顺序行为

Postgres和Mysql之间的排序顺序行为,mysql,postgresql,Mysql,Postgresql,我在Postgres和mysql之间遇到了一些奇怪的排序行为 例如,我创建了带有varchar列的简单表,并在Postgres和Mysql中插入了两条记录,如下所示 create table mytable(name varchar(100)); insert into mytable values ('aaaa'), ('aa_a'); 现在,我已经使用ORDERBY列执行了简单的select查询 Postgres排序顺序: test=# select * from mytable orde

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

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

create table mytable(name varchar(100));
insert into mytable values ('aaaa'), ('aa_a');
现在,我已经使用ORDERBY列执行了简单的select查询

Postgres排序顺序:

test=# select * from mytable order by (name) asc;
 name 
------
 aa_a
 aaaa
(2 rows)
mysql> select * from mytable order by name asc;
+------+
| name |
+------+
| aaaa |
| aa_a |
+------+
2 rows in set (0.00 sec)
Mysql排序顺序:

test=# select * from mytable order by (name) asc;
 name 
------
 aa_a
 aaaa
(2 rows)
mysql> select * from mytable order by name asc;
+------+
| name |
+------+
| aaaa |
| aa_a |
+------+
2 rows in set (0.00 sec)
Postgres和mysql都以不同的顺序返回相同的记录

我的问题是哪一个正确

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

编辑: 我尝试了按排序排序的查询,它解决了我的问题

像这样试过

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的数据库,它可以表示几种不同的语言。英语与法语或德语的分类规则将有所不同

使用基础操作系统对区域设置的支持,并且并非所有区域设置在所有平台上都可用。另一种选择是提供您自己的支持,但这样您就可以在一台机器内实现不兼容


我相信这是第二种选择,但我不是MySQL方面的专家

无关但是:不要在Postgres中使用
(名称)
。它实际上与名称不同。但是从我的理解来看,MySQL的顺序是错误的,因为
\uu
确实应该排在
a
之前(Oracle和SQL Server的排序方式与Postgres相同,至少在我的计算机上是这样的)。我会大胆猜测,PostgreSQL符合标准,而MySQL则不符合。您尝试过使用相同的排序方式吗(实际关键字在PostgreSQL和MySQL中可能不同)排序规则?