Index: base.py
===================================================================
--- base.py	(revision 3946)
+++ base.py	(working copy)
@@ -17,14 +17,40 @@
 
 DatabaseError = Database.DatabaseError
 
+def typecast_mysql_time(s):
+    # workaround mysql issue.
+    # see http://code.djangoproject.com/ticket/433, 2763 and 2369 
+    if s == "00:00:00":
+        # an empty or invalid field gets remapped to zeros
+        return None
+    return util.typecast_time(s)
+    
+
+def typecast_mysql_timestamp(s):
+    # workaround mysql issue.
+    # see http://code.djangoproject.com/ticket/433, 2763 and 2369 
+    if s == "0000-00-00 00:00:00":
+        # an empty or invalid field gets remapped to zeros
+        return None
+    return util.typecast_timestamp(s)
+
+def typecast_mysql_date(s):
+    # workaround mysql issue.
+    # see http://code.djangoproject.com/ticket/433, 2763 and 2369 
+    if s == "0000-00-00":  
+        # an empty or invalid field gets remapped to zeros
+        return None
+    return util.typecast_date(s)
+
 django_conversions = conversions.copy()
 django_conversions.update({
     types.BooleanType: util.rev_typecast_boolean,
-    FIELD_TYPE.DATETIME: util.typecast_timestamp,
-    FIELD_TYPE.DATE: util.typecast_date,
-    FIELD_TYPE.TIME: util.typecast_time,
+    FIELD_TYPE.DATETIME: typecast_mysql_timestamp,
+    FIELD_TYPE.DATE: typecast_mysql_date,
+    FIELD_TYPE.TIME: typecast_mysql_time,
 })
 
+
 # This should match the numerical portion of the version numbers (we can treat
 # versions like 5.0.24 and 5.0.24a as the same). Based on the list of version
 # at http://dev.mysql.com/doc/refman/4.1/en/news.html and
