| Bug #25284 | select CAST(UNHEX('7C40') AS UNSIGNED); fails. Apparently related to #13016. | ||
|---|---|---|---|
| Submitted: | 26 Dec 2006 14:41 | Modified: | 26 Dec 2006 17:05 |
| Reporter: | Gonzalo Javier Larralde | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | MySQL Server: Data Types | Severity: | S2 (Serious) |
| Version: | 5.0.26-community | OS: | Windows (Windows XP) |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | data convertion, data types, hex, INTEGER, UNHEX | ||
[26 Dec 2006 14:41]
Gonzalo Javier Larralde
[26 Dec 2006 16:22]
Gonzalo Javier Larralde
Workaround:
CREATE FUNCTION hex2dec (var CHAR(13)) RETURNS BIGINT UNSIGNED
BEGIN
SET @strVar = CAST(UNHEX(var) as CHAR(13));
SET @i = 1, @res = 0;
WHILE @i <= LENGTH(@strVar) DO
SET @res = @res + ORD( SUBSTRING(@strVar, LENGTH(@strVar) - @i + 1) ) * POW(2, (@i - 1) * 8) ;
SET @i = @i + 1;
END WHILE;
RETURN @res;
END;
[26 Dec 2006 16:38]
Valeriy Kravchuk
Thank you for a problem report. I'vegot the same result as you with 5.0.34-BK. But I do not think it is a bug. Look, UNHEX('7C40') gives '|@' as a result. How that can be converted to integer? This string does not represent any number in any notation. This is different from the bug(s) you refered to.
[26 Dec 2006 17:05]
Gonzalo Javier Larralde
Hi Valeriy,
thanks for your response.
You're right, UNHEX returns an String instead of a Number, so I have to redefine what I consider a bug.
UNHEX should returns a HEX value instead of a String value.
Look that:
SELECT UNHEX('7C40') + 1; --returns 1
SELECT x'7C40' + 1; --returns 31809
If UNHEX returns an String you have not an easy way to convert a string which contains an Hexa number, to a Signed/Unsigned. In the other hand, if you returns a native HEX data type, you can use it as a String, like that:
SELECT x'68656C6C6F20776F726C642C207468697320697320612074657374206F662068657820636F6E76657274696F6E';
I'm not sure if you can understand what I wrote because my english sucks, but I will try to get some help to translate it.
Thanks, and happy new year,
Gonzalo.
