Forced default value
I think something is missing in your example, because this code correctly prints "None":

```python

from peewee import *


db = SqliteDatabase(':memory:')

class M(Model):
    value = IntegerField(null=True)
    class Meta:
        database = db

db.create_tables([M])

m = M.create()
m_db = M[M.id]

print(m_db.value)
# output: None
``` I see this.
But this code correctly throws error and incorrectly prints "0":

```python
from peewee import *


db = MySQLDatabase(DB_NAME, user=DB_USER, password=DB_PASSWORD)

class M(Model):
    value = IntegerField(default=None, null=False)
    class Meta:
        database = db

db.create_tables([M])

m = M.create()
m_db = M[M.id]

print(m_db.value)

# output:
# /home/bukinpk/.local/lib/python3.7/site-packages/pymysql/cursors.py:170: Warning: (1364, "Field 'value' doesn't have a default value")
#   result = self._query(query)
# 0

``` On use `SqliteDatabase(':memory:')` such problems I don't observe. Well shyea...you specified your field with null=false, what do you expect? I expect throwing an error on attempt to set value to NULL, same as on use SqliteDatabase(':memory:'). Looks like this has to do with the sql_mode setting. If you change it to strict_trans_tables or strict_all_tables it should take care of the problem. Yes, it works! Thanks for the help!

UPD.:
But it will broke some string methods, such as:
https://github.com/coleifer/peewee/blob/83873b70bcdfb82320f5d3a127e4783c04531b3a/peewee.py#L4563
Becouse you use `||` as concatination operator.
And if I change `sql_mode` field, to `STRICT_TRANS_TABLES`, i will turn off actualy setted mode:
https://github.com/coleifer/peewee/blob/83873b70bcdfb82320f5d3a127e4783c04531b3a/peewee.py#L3838
And operator `||` will not work correctly.
I think, I should set `PIPES_AS_CONCAT,STRICT_TRANS_TABLES`
Or to append `PIPES_AS_CONCAT` mode to all default setted values:
`STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION`.
I create a model with a fild:
```
class Map(Model):
    size = IntegerField()
```
It is NOT NULL and don't have DEFAULT value by default:
```
pw.IntegerField(
    null=False,
    default=None,
    ...
)
```
But when I create new object, with no "size" argument put in automatically generated constructor, a model is created with a value of 0 in the size field, instead of throwing an exception.
```
Map.create()
/home/bukinpk/.local/lib/python3.7/site-packages/pymysql/cursors.py:170: Warning: (1364, "Field 'size' doesn't have a default value")
  result = self._query(query)
Out[12]: <Map: 5>
```
How can I deactivate this implicit behavior?
