该BUG经mysql确认后在Connector 5.1.4版本中修正.
[9 Apr 2008 4:52] Kuang Yinong
[9 Apr 2008 5:00] Kuang Yinong
mysql version is: 5.0.51a-community-nt os: windows 2003 enterprise edition
[9 Apr 2008 5:01] Kuang Yinong
all my data
Attachment: ddd.sql (text/plain), 17.98 KiB.
[9 Apr 2008 5:38] Jess Balint
Verified as described. Result received is 8000000.00.
[9 Apr 2008 6:50] Jess Balint
If the decimal point was on the beginning edge of one of the segments, it would be skipped. Index: driver/utility.c =================================================================== --- driver/utility.c (revision 1088) +++ driver/utility.c (working copy) @@ -2371,7 +2371,7 @@ if we have the decimal point, ignore it by setting it to the last char (will be ignored by strtoul) */ - if (decpt && decpt > numstr + i && decpt < numstr + i + usedig) + if (decpt && decpt >= numstr + i && decpt < numstr + i + usedig) { usedig = (int) (decpt - (numstr + i) + 1); sqlnum->scale= len - (i + usedig); Index: test/my_types.c =================================================================== --- test/my_types.c (revision 1088) +++ test/my_types.c (working copy) @@ -879,6 +879,9 @@ is(sqlnum_test_from_str(hstmt, num3, 6, -1, 0, NULL, 10123, 0) == OK); is(sqlnum_test_from_str(hstmt, num3, 5, -1, 0, NULL, 10123, 0) == OK); + /* Bug#35920 */ + is(sqlnum_test_from_str(hstmt, "8000.00", 30, 2, 1, NULL, 800000, 0) == OK); + is(sqlnum_test_from_str(hstmt, "1234567.00", 30, 2, 1, NULL, 123456700, 0) == OK); /* some larger numbers */ {SQLCHAR expdata[SQL_MAX_NUMERIC_LEN]= {0xD5, 0x50, 0x94, 0x49, 0,0,0,0,0,0,0,0,0,0,0,0};
[9 Apr 2008 15:29] Kuang Yinong
other field Estimated_Clicks mediumint(9) NOT NULL, Estimated_Conversions mediumint(9) NOT NULL, also will have the problem sometimes, but not always. also change it to double will ok.
[15 Apr 2008 0:02] Lawrin Novitsky
approved
[15 Apr 2008 7:32] Jess Balint
Fix committed in rev 1105, will be released in 5.1.4.
[8 Jul 2008 11:30] Tony Bedford
An entry has been added to the 5.1.4 Changelog: Wrong result obtained when using sum() on a decimal(8,2) field type.