Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #12977 -- Ensure that indexes don't exceed character limits on …

…MySQL. Thanks to carljm for the original report, and hgeerts@osso.nl for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13040 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 9d8492c169d54b727ab387132456d4c1526cff06 1 parent 4e0aa65
@freakboy3742 freakboy3742 authored
View
5 django/db/backends/creation.py
@@ -260,6 +260,8 @@ def sql_indexes_for_model(self, model, style):
def sql_indexes_for_field(self, model, f, style):
"Return the CREATE INDEX SQL statements for a single model field"
+ from django.db.backends.util import truncate_name
+
if f.db_index and not f.unique:
qn = self.connection.ops.quote_name
tablespace = f.db_tablespace or model._meta.db_tablespace
@@ -271,8 +273,9 @@ def sql_indexes_for_field(self, model, f, style):
tablespace_sql = ''
else:
tablespace_sql = ''
+ i_name = '%s_%s' % (model._meta.db_table, self._digest(f.column))
output = [style.SQL_KEYWORD('CREATE INDEX') + ' ' +
- style.SQL_TABLE(qn('%s_%s' % (model._meta.db_table, f.column))) + ' ' +
+ style.SQL_TABLE(qn(truncate_name(i_name, self.connection.ops.max_name_length()))) + ' ' +
style.SQL_KEYWORD('ON') + ' ' +
style.SQL_TABLE(qn(model._meta.db_table)) + ' ' +
"(%s)" % style.SQL_FIELD(qn(f.column)) +
View
3  django/db/backends/mysql/base.py
@@ -227,6 +227,9 @@ def year_lookup_bounds(self, value):
second = '%s-12-31 23:59:59.99'
return [first % value, second % value]
+ def max_name_length(self):
+ return 64
+
class DatabaseWrapper(BaseDatabaseWrapper):
operators = {

1 comment on commit 9d8492c

@james4388

Hey django 1.4.3 meet this bug again :(

Please sign in to comment.
Something went wrong with that request. Please try again.