Python中的脚本不起作用,我将问题简化为以下内容。
在PostgreSQL 9.1中我尝试过:
SELECT 'P 0' < 'P! '
f
在Python 2.7.3中:
>>> 'P 0' < 'P! '
True
为什么' '
不低于PostgreSQL中的'!'
?发生了什么事?
答案 0 :(得分:7)
PostgreSQL使用您的语言环境的排序规则进行字符串比较。 Python使用不同的语言环境(可能是“C”)进行整理。
如果不知道数据库LC_COLLATE
是什么(来自\l+
中的psql
)以及Python的运行时环境是什么,很难说更多。尝试显示数据库区域设置和shell locale
命令的输出。
请参阅the PostgreSQL documentation on locales。
例如,比较和对比:
-- results may vary depending on your OS/libc
SELECT 'P 0' < 'P! ' COLLATE "C"; -- returns true
SELECT 'P 0' < 'P! ' COLLATE "en_GB"; -- returns false
答案 1 :(得分:3)
您永远不能假设字符串比较规则在两种不同的语言或系统中是相同的。有无数的惯例;它没有像数字一样明确定义。平等是最好的定义,但即使在那里你也会发现差异(尾随空格被忽略,大小写无关紧要等);不等字符串的具体排序超出了便携式领域的范围。