You are not logged in.

  • Login

Friday, July 31st 2009, 10:22am

Tags

abs, absolut, Error, Fehler, MySQL

Abstract

Die Absolut Funktion "ABS()" führt zu einem Überlauf wenn unsigned ints mit signed ints vermischt werden.

Article

1. Testszenario


SQL Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE tabelle1 (
  id int(11) NOT NULL AUTO_INCREMENT,
  wert1 int(11) NOT NULL,
  wert2 int(11) NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=MyISAM;
 
INSERT INTO tabelle1 (id, wert1, wert2) VALUES 
(1, 1, 2),
(2, 2, 1);
 
CREATE TABLE tabelle2 (
  id int(11) NOT NULL AUTO_INCREMENT,
  wert1 int(11) UNSIGNED NOT NULL,
  wert2 int(11) UNSIGNED NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=MyISAM;
 
INSERT INTO tabelle2 (id, wert1, wert2) VALUES 
(1, 1, 2),
(2, 2, 1);



2. Query


SQL Code

1
2
3
4
5
6
7
8
SELECT ABS(a.wert1-b.wert2) FROM tabelle1 a JOIN tabelle2 b ON a.id = b.id;
+----------------------+
| val                  |
+----------------------+
| 18446744073709551615 | 
|                    1 | 
+----------------------+
2 rows IN SET (0.00 sec)


3. Workaround


SQL Code

1
SELECT IF(a.wert1>b.wert2,a.wert1-b.wert2,b.wert2-a.wert1) FROM tabelle1 a JOIN tabelle2 b ON a.id = b.id;

Lexikon 4.1.5, developed by www.viecode.com