Обсуждение: Locale problem with psqlODBC under Fedora 16
Hi, I just installed Fedora 16 and it has PostgreSQL 9.1.1 and postgresql-odbc-09.00.0200 (which is psqlODBC). My problem comes from this code: SQLBindParameter(hStmt,13, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_NUMERIC, 0, 0, (SQLPOINTER)&co2, sizeof(co2), NULL); New value of "co2" is 99.47 but as my Hungarian locale uses comma instead of dot for a decimal separator, this pops up: ERROR: invalid input syntax for type numeric: "99,47" at character 210 STATEMENT: update al set megr=1,fpont=1478,csopvez=79,datum='2011-09-05'::date,d1='2011-09-04'::date,t1='21:30:00'::time,d2='2011-09-05'::date,t2='03:00:00'::time,temp=113,n_beepites=1,n_sikeres=1,kutfejnyomas='300',co2='99,47',h2sppm=0,hibajel=E'' where id=2805; With my previous system when this code was used (PostgreSQL 8.2, psqlodbc-08.02.xxxx era), the above code worked. convert.c in psqlODBC hasn't changed much with regard to floating point handling so it still uses setlocale() to switch to "C" locale and I also recompiled the SRPM for Fedora 16 and config.h indeed contains "#define HAVE_LOCALE_H 1" so the relevant code with setlocale() gets compiled in. Still, something broke the locales where something else than a decimal-dot is used for decimal separator. Best regards, Zoltán Böszörményi -- ---------------------------------- Zoltán Böszörményi Cybertec Schönig & Schönig GmbH Gröhrmühlgasse 26 A-2700 Wiener Neustadt, Austria Web: http://www.postgresql-support.de http://www.postgresql.at/
2011-11-06 04:49 keltezéssel, Zoltan Boszormenyi írta: > Hi, > > I just installed Fedora 16 and it has PostgreSQL 9.1.1 and > postgresql-odbc-09.00.0200 (which is psqlODBC). > > My problem comes from this code: > > SQLBindParameter(hStmt,13, > SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_NUMERIC, 0, 0, > (SQLPOINTER)&co2, sizeof(co2), NULL); > > New value of "co2" is 99.47 but as my Hungarian locale uses comma > instead of dot for a decimal separator, this pops up: > > ERROR: invalid input syntax for type numeric: "99,47" at character 210 > STATEMENT: update al set > megr=1,fpont=1478,csopvez=79,datum='2011-09-05'::date,d1='2011-09-04'::date,t1='21:30:00'::time,d2='2011-09-05'::date,t2='03:00:00'::time,temp=113,n_beepites=1,n_sikeres=1,kutfejnyomas='300',co2='99,47',h2sppm=0,hibajel=E'' > where id=2805; > > With my previous system when this code was used (PostgreSQL 8.2, > psqlodbc-08.02.xxxx era), the above code worked. > > convert.c in psqlODBC hasn't changed much with regard to floating point > handling so it still uses setlocale() to switch to "C" locale and I also > recompiled the SRPM for Fedora 16 and config.h indeed contains > "#define HAVE_LOCALE_H 1" so the relevant code with setlocale() gets > compiled in. Still, something broke the locales where something else than > a decimal-dot is used for decimal separator. Same error after I bootstrapped and compiled psqlodbc-09.00.0310 from CVS. > > Best regards, > Zoltán Böszörményi > -- ---------------------------------- Zoltán Böszörményi Cybertec Schönig & Schönig GmbH Gröhrmühlgasse 26 A-2700 Wiener Neustadt, Austria Web: http://www.postgresql-support.de http://www.postgresql.at/
Hi Zoltan, (2011/11/06 12:49), Zoltan Boszormenyi wrote: > Hi, > > I just installed Fedora 16 and it has PostgreSQL 9.1.1 and > postgresql-odbc-09.00.0200 (which is psqlODBC). > > My problem comes from this code: > > SQLBindParameter(hStmt,13, > SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_NUMERIC, 0, 0, > (SQLPOINTER)&co2, sizeof(co2), NULL); > > New value of "co2" is 99.47 but as my Hungarian locale uses comma > instead of dot for a decimal separator, this pops up: > > ERROR: invalid input syntax for type numeric: "99,47" at character 210 > STATEMENT: update al set > megr=1,fpont=1478,csopvez=79,datum='2011-09-05'::date,d1='2011-09-04'::date,t1='21:30:00'::time,d2='2011-09-05'::date,t2='03:00:00'::time,temp=113,n_beepites=1,n_sikeres=1,kutfejnyomas='300',co2='99,47',h2sppm=0,hibajel=E'' > where id=2805; OK I would try to fix it. Please wait for a day or so. regards, Inoue, Hiroshi > With my previous system when this code was used (PostgreSQL 8.2, > psqlodbc-08.02.xxxx era), the above code worked. > > convert.c in psqlODBC hasn't changed much with regard to floating point > handling so it still uses setlocale() to switch to "C" locale and I also > recompiled the SRPM for Fedora 16 and config.h indeed contains > "#define HAVE_LOCALE_H 1" so the relevant code with setlocale() gets > compiled in. Still, something broke the locales where something else than > a decimal-dot is used for decimal separator. > > Best regards, > Zoltán Böszörményi
Hi Zoltan, (2011/11/08 8:53), Inoue, Hiroshi wrote: > Hi Zoltan, > > (2011/11/06 12:49), Zoltan Boszormenyi wrote: >> Hi, >> >> I just installed Fedora 16 and it has PostgreSQL 9.1.1 and >> postgresql-odbc-09.00.0200 (which is psqlODBC). >> >> My problem comes from this code: >> >> SQLBindParameter(hStmt,13, >> SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_NUMERIC, 0, 0, >> (SQLPOINTER)&co2, sizeof(co2), NULL); >> >> New value of "co2" is 99.47 but as my Hungarian locale uses comma >> instead of dot for a decimal separator, this pops up: >> >> ERROR: invalid input syntax for type numeric: "99,47" at character 210 >> STATEMENT: update al set >> megr=1,fpont=1478,csopvez=79,datum='2011-09-05'::date,d1='2011-09-04'::date,t1='21:30:00'::time,d2='2011-09-05'::date,t2='03:00:00'::time,temp=113,n_beepites=1,n_sikeres=1,kutfejnyomas='300',co2='99,47',h2sppm=0,hibajel=E'' >> >> where id=2805; > > OK I would try to fix it. > Please wait for a day or so. Could you please try the attached patch? regards, Inoue, Hiroshi
Вложения
Hi, 2011-11-09 18:57 keltezéssel, Hiroshi Inoue írta: > Hi Zoltan, > > (2011/11/08 8:53), Inoue, Hiroshi wrote: >> >> OK I would try to fix it. >> Please wait for a day or so. > > Could you please try the attached patch? > > regards, > Inoue, Hiroshi it seems to work for me, thanks. I patched 09.00.311 and tested it on the same query. Best regards, Zoltán Böszörményi -- ---------------------------------- Zoltán Böszörményi Cybertec Schönig & Schönig GmbH Gröhrmühlgasse 26 A-2700 Wiener Neustadt, Austria Web: http://www.postgresql-support.de http://www.postgresql.at/