I was sitting in #postgresql today (no not the twitter, the irc) talking to some of the community peeps and I came across this tidbit. MySQL casts integers to float before division[1]. Say what?
mysql> SELECT 3/5; -> 0.60To be honest, I can't fault MySQL for this behavior. It falls in line with the MySQL mantra of make it easy, not "necessarily" correct. A division of 3/5 in a numeric or float would return 0.60. It makes the math easy and normal human consumable.
PostgreSQL and Python on the other hand would give you this:
postgres=# select 3/5; ?column? ---------- 0 (1 row) Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 3/5; 0 >>>To get the similar human consumable response you would want:
postgres=# select 3/5.0; ?column? ------------------------ 0.60000000000000000000 (1 row) Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 3/5.0; 0.59999999999999998Python is using float versus numeric here which explains the disparity. However, MySQL does do something that violates a very basic, as in elementary school math mistake. MySQL defines division by zero as NULL. Yes, you read that correctly.
mysql> SELECT 102/(1-1); -> NULLWhat should happen is:
postgres=# select 102/(1-1); ERROR: division by zero >>> 102/(1-1); Traceback (most recent call last): File "That's correct, an ERROR or EXCEPTION 1. http://dev.mysql.com/doc/refman/5.0/en/arithmetic-functions.html#operator_divide 2. http://en.wikipedia.org/wiki/Division_by_zero", line 1, in ZeroDivisionError: integer division or modulo by zero