Postgres和Mysql之间的排序顺序行为
我在Postgres和mysql之间遇到了一些奇怪的排序行为 例如,我创建了带有varchar列的简单表,并在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
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中可能不同)排序规则?