Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Python “p0”_Python_Postgresql - Fatal编程技术网

Python “p0”

Python “p0”,python,postgresql,Python,Postgresql,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
在Python 2.7.3中:

>>> 'P 0' < 'P! '
True

为什么“不低于”!“在PostgreSQL中?发生了什么?

您永远不能假设两种不同语言或系统中的字符串比较规则是相同的。有无数的习俗;它不像数字那样有很好的定义。相等是最好的定义,但即使在这里,您也会发现尾随空格的差异被忽略,大小写不重要,等等。;不相等字符串的特定顺序远远超出了可移植的范围。

PostgreSQL正在使用区域设置的排序规则进行字符串比较。Python正在使用不同的语言环境(可能是C)进行排序

如果不知道您的数据库LC_COLLATE来自psql中的\l+,以及Python的运行时环境是什么,就很难说得更多。尝试显示数据库区域设置和shell区域设置命令的输出

例如,比较和对比:

-- 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

检查数据库使用的区域设置。字符串比较取决于当前区域设置中的排序方式。我很确定这不是因为区域设置。@KennyTM:某些区域设置在排序时忽略空格,这可以解释这种情况下的差异。LC_COLLATE='es_CL.UTF-8'在postgresql中,而LC_COLLATE=es_MX.UTF-8在shell中。