| Bug #16678 | FORMAT gives wrong result if client run with default-character-set=utf8 | ||
|---|---|---|---|
| Submitted: | 20 Jan 2006 16:40 | Modified: | 8 Mar 2006 16:23 |
| Reporter: | Victoria Reznichenko | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 5.0 | OS: | Linux (linux) |
| Assigned to: | Sergei Glukhov | CPU Architecture: | Any |
[20 Jan 2006 16:40]
Victoria Reznichenko
[21 Feb 2006 12:27]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/2968
[1 Mar 2006 12:56]
Alexander Barkov
It looks that the patch allocates too many bytes if the first argument is a multibyte string. This code should probably be better: uint char_length= args[0]->max_length / args[0]->collation.collation->mbmaxlen; max_length=(char_length+(char_length-args[0]->decimals)/3) * collation.collation->mbmaxlen;
[1 Mar 2006 16:08]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/3338
[2 Mar 2006 6:52]
Alexander Barkov
Ok to push.
[6 Mar 2006 8:48]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/3483
[6 Mar 2006 8:54]
Sergei Glukhov
Fixed in 5.0.20
[8 Mar 2006 16:23]
Paul DuBois
Noted in 5.0.20 changelog. The <literal>FORMAT()</literal> function returned an incorrect result when the client's <literal>character_set_connection</literal> value was <literal>utf8</literal>. (Bug #16678)
[17 Apr 2006 7:15]
Vladimir Zheleznyak
Thank you for fixing this bug.
We'd like to note that the same bug persists in the following functions:
SELECT INET_NTOA(3520061480);
SELECT PASSWORD('badpwd');
SELECT SHA('abc');
SELECT SHA1('abc');
SELECT MD5('testing');
SELECT OLD_PASSWORD('str')
SELECT 38.8, CONCAT(38.8);
SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
SELECT DAYNAME('1998-02-05');
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
SELECT SUBTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
[13 May 2006 9:19]
Sergei Glukhov
I have checked these functions and can't repeat the bug. Could you provide more cleare test case?
[19 May 2006 7:02]
Vladimir Zheleznyak
After connecting to the server we execute 'SET NAMES UTF8' then trying to execute SQL statement using mysql_real_query, for example
SELECT OLD_PASSWORD('str')
The result produced by this query is '789ee25b2631e00a'. It is 16 symbols length. Function mysql_fetch_field_direct returns LengthInBytes = 16, but for UTF8 string this value isn't correct. We think that LengthInBytes must be 16 * 3 = 48 bytes.
