Re: '_' < '5' -- different answer on 7.2 and 7.3
От | Stephan Szabo |
---|---|
Тема | Re: '_' < '5' -- different answer on 7.2 and 7.3 |
Дата | |
Msg-id | 20030704162603.I26906-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | Re: '_' < '5' -- different answer on 7.2 and 7.3 (David Blasby <dblasby@refractions.net>) |
Список | pgsql-hackers |
On Fri, 4 Jul 2003, David Blasby wrote: > > My first guess would be that you're not running in "C" locale > > on the 7.3 system. I get false on my 7.3.1 system in C locale, > > but if I compare the two strings in C using en_US for example I > > seem to get results like the above ('_'<'5' is true). > > It turns out our 7.3 database was somehow initd with local "en_US". > But in MS vc++: > > TRACE("locale set to 'en_US'\n"); > setlocale( LC_ALL, "English_United States" ); > if (strcoll("_5","5") <0 ) > TRACE("strcoll('_5','5') -- <0 \n"); > else > TRACE( "strcoll('_5','5') -- >=0\n"); > > returns: > locale set to 'en_US' > strcoll('_5','5') -- <0 > > > Which is to say postgresql thinks "_5" > "5", but > (a bit strangely) "_" < "5" (the '>' and '<' are reversed). > > vc++ thinks "_5" < "5" and "_" < "5". > > So, which one is correct and why does the other disagree? Probably different definitions of the locale. What type of system is the server on? Under Redhat 9, en_US, doing a small C program #include <stdio.h> #include <locale.h> #include <string.h> int main() { setlocale( LC_ALL, "en_US" ); printf("%d\n", strcoll("_5", "5")); printf("%d\n", strcoll("_","5")); } I get 1 -1 Which would appear to match what you're seeing from PostgreSQL.
В списке pgsql-hackers по дате отправления: