Re: [Fwd: Re: [Pljava-dev] char with trailing space, PreparedStatement.setObject
От | Thomas Hallgren |
---|---|
Тема | Re: [Fwd: Re: [Pljava-dev] char with trailing space, PreparedStatement.setObject |
Дата | |
Msg-id | 44A18A53.5000107@tada.se обсуждение исходный текст |
Ответ на | Re: [Fwd: Re: [Pljava-dev] char with trailing space, PreparedStatement.setObject (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: [Fwd: Re: [Pljava-dev] char with trailing space, PreparedStatement.setObject
|
Список | pgsql-jdbc |
Tom Lane wrote: > Thomas Hallgren <thomas@tada.se> writes: > >> so why does it make a difference to use varchar instead of text? >> > > It's a question of type resolution rules. text is the preferred string > type so it "wins" in cross-type situations, in particular > char_value = text_value > will be interpreted as > char_value::text text_eq text_value > varchar is not only not a preferred type, it doesn't even have any > comparison ops of its own (it depends on text's ops). Therefore given > char_value = varchar_value > the parser is faced with the alternative interpretations > char_value::text text_eq varchar_value::text > char_value char_eq varchar_value::char > and it will prefer the latter because it has fewer casts. > See > http://www.postgresql.org/docs/8.1/static/typeconv.html > particularly rules 10.2.3b and 3c. The upshot of all this > is that a parameter specified as "text" dominates any comparison > to other string datatypes, whereas one specified as "varchar" > does not. Yeah, it's a bit grotty, but it gets the job done > and it's not an area we're likely to change much. > > regards, tom lane > Hmm, OK. I checked my code and I don't use any specific type. Instead, I use SPI_getargtypeid(ePlan, idx) on the prepared query and the pgType->typinput function of the type that corresponds to the returned oid. Perhaps the SPI_getargtypeid should return varchar for all text types? Regards, Thomas Hallgren
В списке pgsql-jdbc по дате отправления: