summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2016-03-19 12:15:59 +0100
committerClaude Paroz <claude@2xlibre.net>2016-04-08 20:34:16 +0200
commitf9a2a7db173b53f9cb0cd2d3def80d4eed72631c (patch)
treefa6cfafbf9e6473ca8300d3e43d7481b6b9cdb19 /django
parent0d3c616fbb2f49fa7ff6809e5a6777275352b35b (diff)
Fixed #26351 -- Added MySQL check to warn about strict mode option
Thanks Adam Chainz for the initial implementation in django-mysql. Thanks Adam Chainz, Tim Graham, and Shai Berger for the reviews.
Diffstat (limited to 'django')
-rw-r--r--django/db/backends/mysql/validation.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/django/db/backends/mysql/validation.py b/django/db/backends/mysql/validation.py
index 2e3bb0279b..e62a6e4c7e 100644
--- a/django/db/backends/mysql/validation.py
+++ b/django/db/backends/mysql/validation.py
@@ -1,8 +1,31 @@
from django.core import checks
from django.db.backends.base.validation import BaseDatabaseValidation
+from django.utils.version import get_docs_version
class DatabaseValidation(BaseDatabaseValidation):
+ def check(self, **kwargs):
+ issues = super(DatabaseValidation, self).check(**kwargs)
+ issues.extend(self._check_sql_mode(**kwargs))
+ return issues
+
+ def _check_sql_mode(self, **kwargs):
+ with self.connection.cursor() as cursor:
+ cursor.execute("SELECT @@sql_mode")
+ sql_mode = cursor.fetchone()
+ modes = set(sql_mode[0].split(','))
+ if not (modes & {'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES'}):
+ return [checks.Warning(
+ "MySQL Strict Mode is not set for database connection '%s'" % self.connection.alias,
+ hint="MySQL's Strict Mode fixes many data integrity problems in MySQL, "
+ "such as data truncation upon insertion, by escalating warnings into "
+ "errors. It is strongly recommended you activate it. See: "
+ "https://docs.djangoproject.com/en/%s/ref/databases/#mysql-sql-mode"
+ % (get_docs_version(),),
+ id='mysql.W002',
+ )]
+ return []
+
def check_field(self, field, **kwargs):
"""
MySQL has the following field length restriction: