Обсуждение: Comparing a varchar of length > 32
Hello, we are using a table with a primary key of type varchar[50]. If we try to find entries with select * from <table> where <table.key> = '<text>'; entries with a key length of more than 32 characters are not found. Entries with a shorter key are found. Using "Like" instead of "=" works for varchar keys with length > 32 as well. Does anybody know about this Problem ? (We use PostgresQL 7.4.1) Thanks in advance, Christian Enklaar.
Christian Enklaar wrote: > we are using a table with a primary key of type varchar[50]. > If we try to find entries with select * from <table> where > <table.key> = '<text>'; > entries with a key length of more than 32 characters are not found. > Entries with a shorter key are found. Using "Like" instead of "=" > works for varchar keys with length > 32 as well. Please post the actual table definitions, the actual data, the actual command you are running, and the actual results you are getting. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Christian Enklaar wrote: > Hello, > > we are using a table with a primary key of type varchar[50]. > If we try to find entries with select * from <table> where <table.key> = > '<text>'; > entries with a key length of more than 32 characters are not found. > Entries with a shorter key are found. Using "Like" instead of "=" works for > varchar keys with length > 32 as well. > > Does anybody know about this Problem ? > (We use PostgresQL 7.4.1) > I think you are hiding some informations. It works here with a 7.4.5 and I'm not aware of any bug like this in previous versions. test=# \d test Table "public.test" Column | Type | Modifiers --------+-----------------------+----------- a | character varying(50) | not null Indexes: "test_pkey" primary key, btree (a) test=# select a, length(a) from test; a | length ----------------------------------------------------+-------- 01234567890123456789012345678901234567890123 | 44 0123456789012345678901234567890123456789 | 40 01234567890123456789012345678901234567890123456789 | 50 (3 rows) test=# select length(a) from test where a = '01234567890123456789012345678901234567890123'; length -------- 44 (1 row) Just an idea, could you reindex your table ? Regards Gaetano Mendola
Hello, thanks for your help. Seems as if the problem was related to our locale settings. We are running PostgreSQL on QNX and did not set any specific locale when creating the database. Now when we explicitely use LOCALE C on database creation everything works fine. "Christian Enklaar" <christian.enklaar@mbs-software.de> schrieb im Newsbeitrag news:civ5i0$12s4$1@news.hub.org... > Hello, > > we are using a table with a primary key of type varchar[50]. > If we try to find entries with select * from <table> where <table.key> = > '<text>'; > entries with a key length of more than 32 characters are not found. > Entries with a shorter key are found. Using "Like" instead of "=" works for > varchar keys with length > 32 as well. > > Does anybody know about this Problem ? > (We use PostgresQL 7.4.1) > > Thanks in advance, > Christian Enklaar. > > > >