【发布时间】:2011-10-26 14:21:15
【问题描述】:
为什么'2'初始空间大于'10'?
select ' 2' > '10';
?column?
----------
t
(1 row)
我尝试了 latin1 和 utf8 英文排序规则:
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+------------+-----------+------------------+------------------+-----------------------
cpn | cpn | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
teste | cpn | LATIN1 | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
我知道它与类型有关,因为当它被强制转换时,它会按预期工作:
teste=> select ' 2'::char > '10';
?column?
----------
f
(1 row)
这里到底发生了什么?
编辑:
以上都是在 Fedora 13 中使用 8.4.8 完成的。但我刚刚在 Centos 6 中使用 9.04 进行了测试,结果相同:
select ' 2' > '10';
?column?
----------
t
(1 row)
数据库列表
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+------------+-----------+-------------+-------------+-----------------------
cpn | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
新编辑:
这是为了进一步混淆:
select ' ' > '1';
?column?
----------
f
(1 row)
【问题讨论】:
-
把空间拿出来有什么不同吗?
-
你使用的是什么版本的 PostgreSQL?
-
@Jared 如果我把空间拿出来,那么它会按预期工作,即'2'大于'10'
-
人们,在投票前阅读答案。
-
这个讨论帖支持all UTF-8 collations ignore spaces。存在其他类似的线程,因此问题似乎是这些排序规则中忽略了空格。
标签: sql postgresql collation