[Raiford@labware.com: Re: float8 column size defined as 15 instead of 53?]
От | Alvaro Herrera |
---|---|
Тема | [Raiford@labware.com: Re: float8 column size defined as 15 instead of 53?] |
Дата | |
Msg-id | 20160119222804.GA261658@alvherre.pgsql обсуждение исходный текст |
Ответы |
Re: [Raiford@labware.com: Re: float8 column size defined as 15
instead of 53?]
|
Список | pgsql-odbc |
----- Forwarded message from Raiford@labware.com ----- Date: Tue, 19 Jan 2016 17:12:33 -0700 From: Raiford@labware.com To: pgsql-odbc-owner@postgresql.org Subject: Re: float8 column size defined as 15 instead of 53? Message-ID: <OFB569ED94.0C1AE84E-ON85257F40.00006986-87257F40.0000B402@labware.com> So I am finding conflicting information about this value. The documentation for Column Size ( https://msdn.microsoft.com/en-us/library/ms711786%28v=vs.85%29.aspx) shows the value being the decimal precision. I know from experience that I can get binary precision from SQL Server and from Oracle, so maybe there is something else going on that I don't understand. I did look at the code for the pgsql-odbc driver and in pgtype_attr_column_size() the driver is answering 15 for float8 in the older driver that I am using. In the current driver it is answering 17. Now I'm even more confused! Surely there can only be 15 digits of decimal precision in a IEEE double floating point? Is Postgres somehow able to include 17 digits precision if requesting the value as text (9 for single precision floats)? In the current driver these values are from PG_REAL_DIGITS and PG_DOUBLE_DIGITS. In the older driver they were simply hard coded. Can anyone shed some light on this stuff? Clearly there is something I'm missing. Jon From: Jon Raiford/Employee/LW-US To: pgsql-odbc-owner@postgresql.org Date: 01/19/2016 12:27 PM Subject: float8 column size defined as 15 instead of 53? I'm seeing that the columns defined as float8 in Postgres are being described as SQL_FLOAT(15) instead of SQL_FLOAT(53). From what I can tell, according to the ODBC spec, the column size should be reported as binary precision, but the Postgres ODBC driver is reporting the decimal precision. https://msdn.microsoft.com/en-us/library/ms710150%28v=vs.85%29.aspx "SQL_FLOAT FLOAT(p) Signed, approximate, numeric value with a binary precision of at least p. (The maximum precision is driver-defined.)[5]" Unfortunately I'm not running on a current ODBC driver and it would be very inconvenient for me to load it at this moment. Could someone with the latest driver verify whether or not SQLDescribeCol(), SQLGetTypeInfo(), or SQLColAttribute() still report this with the decimal precision? I am happy to add a kludge to my code to treat numbers <= 15 as decimal precision, but at some point it would be nice to see this be fixed if it hasn't already. I'm currently running the PostgreSQL Unicode 9.01.01.00 driver from 30-Dec-2011. I know it is quite old, so I'd be happy to hear that this is already resolved. I'd also be happy to hear that I've misunderstood the spec and would love clarification. For what its worth, I do see that both SQL Server and Oracle are reporting binary precision. Thank you, Jon www.labware.com Results Count www.labware.com Results Count ----- End forwarded message -----
В списке pgsql-odbc по дате отправления: