一个 Python 脚本无法运行,我将问题归纳如下。
在 PostgreSQL 9.1 中,我尝试了以下操作:
SELECT 'P 0' < 'P! '
f
在Python 2.7.3中:
>>> 'P 0' < 'P! '
True
为什么在PostgreSQL中,
' '
不比'!'
小?发生了什么?一个 Python 脚本无法运行,我将问题归纳如下。
在 PostgreSQL 9.1 中,我尝试了以下操作:
SELECT 'P 0' < 'P! '
f
>>> 'P 0' < 'P! '
True
' '
不比'!'
小?发生了什么?PostgreSQL正在使用您的语言环境的规则进行字符串比较。 Python在排序时使用不同的语言环境(可能是“C”)。
如果不知道数据库LC_COLLATE是什么(从psql中的\l+获取),以及Python的运行环境,请提供数据库语言环境和shell locale命令的输出。
请参阅PostgreSQL文档了解语言环境的更多信息。
例如,进行比较:
-- 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
在两个不同的语言或系统中,您永远不能假设字符串比较规则相同。有无数种约定;它不像数字那样定义良好。等式是最清晰明确的,但即使在那里,也会发现差异(忽略尾随空格,大小写不敏感等);非相等字符串的特定排序远超出可移植领域。